ゲームラグ白書 › 一部のユーザーだけに起きる問題
ロード中に届いた出現通知の破棄 Spawn messages dropped before the client is ready
原因ID pt-loading-drop · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
ゾーンに入るとすぐにサーバーが周囲のNPCの出現通知を送りますが、クライアントがまだマップを読み込んでいる最中なので、その通知を破棄してしまいます。
なぜ サーバーが入場処理の直後に周囲のオブジェクトの出現通知を送信 → すると クライアントはロード中でメッセージハンドラーがまだないため、通知を破棄 → 画面では サーバーは送信済みとして扱い、再送しない。視界から外れて戻ってくるまでNPCが表示されない
- 症状
- 表示されない・ゴースト
- 要因
- パケットロス
- 誰に起きるか
- 同じPCの片方のクライアントだけ, 自分だけ
- いつ
- 接続直後・メンテ明け, 移動中・マップ切り替え時
- 担当
- 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- クライアント:ロードが終わったら「準備完了」を送る、またはロード中に受け取ったパケットを保管しておいて処理。サーバー:「準備完了」を受け取ってから周囲の情報を送信。
- 数値の目安
- 同じPCで2つのクライアントが同時にロードしたり、ロードする側がバックグラウンドウィンドウだったりすると、CPU・ディスクを分け合ううえに処理も制限されるため、そちらのロードが数倍長くなることがあります。サーバーの入場処理が速くなっても、同じバグが表に出ます。
- グラフでは
- 一部だけ高い · クライアントごとのロード時間、ロード中に破棄したメッセージ数
- 確認箇所
- クライアントがロード中に受け取って破棄したメッセージの数・種類とロード完了時刻を、サーバーが出現通知を送った時刻と比較。同じPCで2つのクライアントを同時にロードするか、ロードする側をバックグラウンドウィンドウにすると再現しやすい
- 該当する場合
- 表示されないNPCの出現通知をサーバーは送っており、到着時刻がロード完了前で、その時間に破棄したメッセージ数が増えている。ロードが長い側のクライアントでだけ起きる
- 該当しない場合
- 出現通知がロード完了後に届いているのに表示されないなら、基準スナップショットの欠落かオブジェクトIDの再利用による混同。サーバーがそのNPCの通知をそもそも送っていないなら、視界登録の順序の乱れか、チャンネル・フェーズの違い
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- NetworkConfig class (Netcode for GameObjects 2.5) Unity
SpawnTimeout:まだ生成されていないオブジェクトのメッセージは保留し、時間内に生成されなければ破棄 - Actor Relevancy in Unreal Engine Epic Games
関連性がなくなったアクターはクライアントから削除され、再び関連すると新たにレプリケート
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(表示されない・ゴースト)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る