ゲームラグ白書 › 一部のユーザーだけに起きる問題
時刻推定の誤差によるオブジェクトの保留 Clock estimate error holds or discards entities
原因ID pt-clock-hold · 主担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
クライアントが推定したサーバー時刻がずれていると、届いたばかりのオブジェクト情報を「まだ未来」として保留したり、「古すぎる」として破棄したりします。
なぜ 片方のクライアントのサーバー時刻の推定が大きくずれる(ロード中の測定、省電力からの復帰) → すると 補間の基準時刻とオブジェクト情報の時刻が合わない → 画面では オブジェクトが遅れて現れるか、止まったまま見える
- 症状
- 表示されない・ゴースト, カクつき
- 要因
- 遅延
- 誰に起きるか
- 同じPCの片方のクライアントだけ
- いつ
- しばらく放置した後, 接続直後・メンテ明け
- 担当
- 主担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- 時刻同期を定期的にやり直し、差が大きければ即座にリセット、ロード中や省電力からの復帰直後に測った値は使わない。
- グラフでは
- 一部だけ高い · クライアントごとのサーバー時刻の推定誤差
- 確認箇所
- クライアントに、推定したサーバー時刻、RTT、時刻同期をやり直した時刻、オブジェクト情報を保留・破棄した回数を記録。ロード直後や省電力からの復帰直後に再現してみる
- 該当する場合
- 問題が起きたクライアントだけ推定誤差がリセット基準(UnityではhardResetThresholdSec、デフォルト0.2秒)を超え、オブジェクト情報を未来として保留したり過去として破棄したりした記録があり、時刻同期をやり直すとすぐ正常になる
- 該当しない場合
- 推定誤差が小さいのに遅れて現れるなら、接続ごとの送信バジェット・優先度か、ロード側の原因
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- NetworkTimeSystem class (Netcode for GameObjects 2.5) Unity
時間差がhardResetThresholdSec(デフォルト0.2秒)を超えると強制的に合わせ、ふだんはadjustmentRatioで少しずつ速く・遅く調整 - NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
LocalTimeはサーバーより先行し、ServerTimeは遅れる。遅れて届いたメッセージは待ち時間がマイナスになることがある
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(表示されない・ゴースト)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る