遊戲 Lag 白皮書 › 同步設計
用戶端權威 Client-authoritative results
原因 ID sy-client-auth · 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
在含圖解與實驗的完整版中開啟卡片 →
各自決定自己的結果時,自己的畫面很順暢,但結果會與其他人的畫面不一致,也容易被外掛利用。
為什麼 位置、命中由用戶端決定,伺服器只負責轉送 → 於是 兩個人都聲稱自己先打中,伺服器無法驗證 → 畫面上 對手瞬移、穿牆,「我明明打中卻沒中」
- 症狀
- 瞬移, 吃指令/回檔
- 因素
- 延遲
- 誰會遇到
- 整個伺服器
- 何時
- 一直都有
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
- 遊戲開發團隊要做的事
- 伺服器:重要的結果(命中等)由伺服器自行驗證,移動要檢查速度與距離。用戶端:收到伺服器拒絕或校正的結果時,改回伺服器給的值。
- 圖表上
- 一開始就一直偏高 · 不可能的移動速度、互相矛盾的命中回報數
- 查看位置
- 在伺服器端原樣記錄用戶端回報的位置與命中,用連續的位置回報計算移動速度,統計超過最大速度的回報,以及兩人都說自己先打中的回報
- 符合的跡象
- 伺服器未經驗證就把回報轉送給其他用戶端,不可能的速度或互相矛盾的命中回報持續出現,與更新、地區無關
- 不符合的跡象
- 伺服器自行計算或驗證結果時,就不是這個原因。這時的瞬移要查封包遺失或內插緩衝
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
出處
- Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
由用戶端回報結果的方式,只有在用戶端可信時才可行。因為擔心外掛而採用權威伺服器 - Peeking into VALORANT's Netcode Riot Games
伺服器權威模型:伺服器絕不信任用戶端看到的遊戲狀態 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
把權限分給用戶端會讓作弊變容易,也不再有一個掌管所有物件的單一模擬
相關原因
同一層:同步設計
同一症狀(瞬移)在其他層的原因
查看含圖解與實驗的完整版卡片