한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L1 クライアントのゲームプロセス

クライアントサイド予測の不一致 Prediction mismatch / reconciliation

原因ID cg-predict · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発

図と実験のあるメインページでこのカードを開く →

自分のクライアントが先に動かして見せたのに、サーバーの計算結果が違うと、自分のキャラクターが引き戻されます。

なぜ クライアントがサーバーの確認前に先に動く(予測) → すると サーバーが衝突・移動速度・バフを違う形で計算するか、コマンドを受け取れない → 画面では 確認が届いたとき、自分のキャラクターが後ろへ引き戻される

症状
引き戻し
要因
パケットロス, 遅延
誰に起きるか
自分だけ
いつ
移動中・マップ切り替え時, ときどきランダムに
担当
主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発
ゲーム開発チームの対応
クライアント:サーバーと同じ移動コードを使用、入力の重複送信、補正は滑らかに。サーバー:クライアントと同じ移動コードを使用、重複して届いた入力は入力番号で除外して1回だけ処理。
数値の目安
引き戻される距離は「ずれた時間 × 移動速度」。コマンドがいくつか消えるだけで1〜3m。
グラフでは
不定期なスパイク · サーバー補正(予測ミス)の回数
確認箇所
サーバーが送った位置補正の回数と補正距離を記録。UnrealではサーバーのClientAdjustPositionによる補正、UnityのNetcode for Entitiesでは予測ミスで巻き戻して再計算した回数を数える
該当する場合
引き戻しの報告時刻に補正が集中し、特定のバフ・地形・移動スキルで補正距離が繰り返し大きくなる
該当しない場合
補正がパケットロスの多いときにだけ集中するなら、入力パケットのロス(回線)側。補正がないのに他のキャラクターだけ引き戻されて見えるなら「過度な外挿(デッドレコニング)」
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要

出典

  1. Introduction to prediction (Netcode for Entities 6.5) Unity
    クライアントとサーバーが同じシミュレーションコードで予測し、サーバーの状態と異なれば(予測ミス)巻き戻して再計算するため、補正が目に見える
  2. Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
    パケットロスに備え、最新の入力と一緒に直前数ティック分の入力を重複して送る
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    クライアントが先に動き、サーバーが同じ移動を再現。位置が異なればClientAdjustPositionで補正し、保存しておいた移動を再適用

あわせて読みたい原因

同じ層:L1 クライアントのゲームプロセス

同じ症状(引き戻し)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る