ゲームラグ白書 › 一部のユーザーだけに起きる問題
モンスターの制御権が遅いクライアントにある Monster movement delegated to a player client
原因ID pt-mob-control · 主担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
サーバー負荷を減らすため、モンスターの移動計算を近くのプレイヤー1人のクライアントに任せるゲームがあります。その人の回線が悪いと、そのモンスターが全員の画面でおかしな動きをします。
なぜ サーバーがモンスターの移動計算を、最も近い(または先に来た)プレイヤーのクライアントに任せる → すると 任された人の結果報告が遅れたり、まとまったりしてサーバーに届く → 画面では そのモンスターだけが周囲全員の画面で一瞬止まってはワープ。任された本人の画面では問題なし
- 症状
- ワープ, カクつき, 早送り
- 要因
- ジッター, パケットロス
- 誰に起きるか
- 特定のキャラだけおかしく見える, 特定の場所・チャンネル
- いつ
- 常に, ときどきランダムに
- 担当
- 主担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- 制御権を回線の良い人に渡す(Ping・パケットロス基準)、報告が途切れたらサーバーが即座に回収、ボスのような重要なモンスターはサーバーが自ら計算。
- グラフでは
- 一部だけ高い · モンスターごとの位置報告の間隔(制御権を持つクライアント別)
- 確認箇所
- サーバーに、モンスターごとに制御権を持つクライアントと、そのクライアントの報告間隔・RTT・パケットロスを記録。サーバー側のパケットキャプチャで、そのクライアントが送ったパケットの到着間隔も確認できる
- 該当する場合
- おかしく動くモンスターの制御権がすべて同じ1人にあり、その人の報告間隔がばらつくか途切れ、制御権をほかの人に渡すとすぐ正常になる
- 該当しない場合
- サーバーが自ら計算するモンスターも同じように飛ぶなら、サーバーのティック遅延か見ている人側の回線。制御権を移しても飛び続けるなら、コマンド同期の経路計算の不一致
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
- もっと詳しく
- 任された人は問題ないと感じるため、報告は「モンスターがおかしい」という形でしか来ません。1人を除く全員が同じモンスターをおかしく見ているなら、まずそのモンスターの制御権を誰が持っているかを確認します。
出典
- Authority (Netcode for GameObjects 2.5) Unity
分散権限モデルでは、ゲームインスタンス(クライアント)ごとに一部のネットワークオブジェクトの権限を持ち、そのオブジェクトを計算 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
権限がクライアントに分散すると単一のシミュレーションがなくなり、チートに弱くなる
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(ワープ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る