ゲームラグ白書 › 同期設計
クライアント権威型 Client-authoritative results
原因ID sy-client-auth · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
それぞれが自分の結果を決めると、自分の画面は快適ですが、ほかの人の画面と結果が食い違い、チートにも弱くなります。
なぜ 位置・命中をクライアントが決め、サーバーは中継するだけ → すると 2人が互いに自分が先に当てたと主張し、サーバーは検証できない → 画面では 相手がワープ・壁抜け、「自分は当てたのに当たっていない」
- 症状
- ワープ, 不発・ロールバック
- 要因
- 遅延
- 誰に起きるか
- サーバー全体
- いつ
- 常に
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- サーバー:重要な結果(命中など)は自ら検証、移動は速度・距離をチェック。クライアント:サーバーが拒否・補正した結果を受け取ったら、その値に戻す。
- グラフでは
- 最初から常に高い · ありえない移動速度・食い違う命中報告の数
- 確認箇所
- サーバーで、クライアントが報告した位置・命中をそのまま記録しておき、連続する位置報告から移動速度を計算して、最大速度を超える報告と、2人が互いに先に当てたという報告を数える
- 該当する場合
- サーバーが報告を検証せずにほかのクライアントへ中継しており、ありえない速度や互いに食い違う命中報告が、アップデート・地域に関係なく継続的に出る
- 該当しない場合
- サーバーが結果を自ら計算・検証しているなら、この原因ではない。その場合のワープはパケットロスか補間バッファ側を確認
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- 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
権限をクライアントに分散するとチートが容易になり、すべてのオブジェクトを管理する単一のシミュレーションがなくなる
あわせて読みたい原因
同じ層:同期設計
同じ症状(ワープ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る