ネットコードは、別々の機器が同じ対戦に参加するための、ゲームソフトの一部分です。一つのアルゴリズムではなく広い呼び名で、情報の送信、シミュレーションの同期、メッセージが遅れたり食い違ったりしたときの対処を含みます。
責任を押しつけやすい相手でもあります。外れた弾、突然飛ぶ位置、ボタンの反応の遅れは、原因が違っても似て感じられます。主な技術を知れば、単に「このゲームのネットコードは悪い」と言うより、有用な診断になります。
実際に何が起きたかは、誰が決める?
サーバーに最終的な決定権があるゲームでは、共有される結果について、クライアントが最後の判断を下すわけではありません。Epicのネットワーク概要は、決定権を持つサーバーの世界と、接続されたクライアントが表示する各バージョンを説明しています。
専用サーバーには、ローカルのプレイヤーがいません。リッスンサーバーでは、サーバーとして動く機器でプレイヤーも遊びます。どちらもクライアント・サーバー型です。プレイヤーのパソコンで対戦をホストするからといって、設計から決定権が自動的になくなるわけではありません。
この問いと、メッセージの移動方法は分けましょう。ピアツーピアは参加者間の通信を表し、どのホストにも決定権がないとか、マッチメイキング、リレー、補助インフラが不要だという一律の保証ではありません。
ティック、更新、フレームは同じではない
シミュレーションのティックはゲーム状態を進め、ネットワーク更新は情報を伝え、描画フレームは画像を作ります。それぞれ違う予定で動けます。オフラインゲームも段階ごとにシミュレーションを進めます。サーバーがないから数学的に連続になるわけではありません。
毎秒60ティックなら、公称間隔は約16.67ミリ秒です。この計算だけでは、あなたの操作が別のプレイヤーの画面へ届くまでの総時間は決まりません。処理、伝送、バッファリング、描画のすべてが関わります。
高いティックレートは特定の設計を助けますが、数字だけで命中判定の改善は保証できません。何を記録し、時刻を付け、検証するかも重要です。
予測が手元の動きを素早くする
すべての動きを表示する前にサーバーの返事を待つと、操作が鈍く感じられます。RiotによるVALORANTのネットコード解説では、サーバーが決定権を持ったまま、クライアントが手元の入力結果を予測します。両者のシミュレーションが食い違えば、サーバーがクライアントを修正します。
この整合処理が、位置の飛びや、ゴムで引き戻されるようなラバーバンディングとして見えることがあります。一致を取り戻す仕組みですが、頻繁な修正は問題の兆候にもなります。位置が飛ぶ映像だけでは、データ損失、処理の引っかかり、シミュレーションの欠陥のどれかはわかりません。
補間が遠くの動きを滑らかにする
更新は、必ずしも一定間隔で届きません。Glenn Fiedlerのスナップショット補間の実演は、受信側が状態の記録を一時保存し、既知の状態間の位置を描く方法を示しています。多少の遅れと引き換えに、表示を滑らかにします。
したがって、補間と外挿は違います。前者は利用できるサンプルの間を推定し、後者は最新の既知の状態より先へ予測します。どちらも単に、コンピューターが相手の今の位置を知っている、と説明すべきではありません。
ロールバックは予測した過去を直す
ロールバックでは、遠隔地からの入力がすべて届く前でもゲームを進められます。予測が間違っていれば、以前の状態を戻し、正しい入力で再び先へシミュレーションします。GGPOプロジェクトは、この手法のよく知られた実装です。
その開発者ガイドは、決定論的なシミュレーション、保存・復元できる状態、途中の各段階を描画せずにシミュレーションを進める機能を求めています。予測の上限も記されています。不足する情報が限界を超えたら、ゲームは手探りで進み続けるべきではありません。
ロールバックは、遅延ゼロや完全な復旧の約束ではありません。GGPOは予測と併せて意図的な入力遅延にも対応し、誤予測は目に見える不連続を生む場合があります。実装では、反応の速さ、修正の長さ、画面上のフィードバックを釣り合わせる必要があります。
ロールバックとサーバーは併用できる
ロールバックとクライアント・サーバー型通信を、互いに排他的な選択肢として扱うのは誤解を招きます。2XKOのオンライン設計の説明でRiotは、両方を使い、サーバーが入力、状態、時間に決定権を持つと述べています。
同記事は、オフラインでもオンラインでも意図的な入力遅延があると説明します。この例は、よくある二つの単純化を崩す点で重要です。ロールバックは必ずしもピアツーピアではなく、ロールバック採用ゲームでも、意図的に遅らせるフレームをすべて排除する必要はありません。
隠れた後に攻撃が当たることがある理由
プレイヤーは、異なる時点の情報を見ています。RiotのVALORANT解説では、撃った人が見たものに対応する、以前の世界状態に対して射撃を判定すると説明しています。同時に、サーバーがどこまで巻き戻すかの制限も重視しています。
これで、防御側が安全な場所へ届いたように見えてから、ダメージを受ける理由を説明できます。ただし、そのような死亡がすべて正しかったとか、ラグ補償だけが原因だという証明にはなりません。個別の出来事を判断するには、一つの画面の最後の画像だけでなく、ゲームの規則と時間の証拠が必要です。
対戦がおかしいときに記録したいこと
まずゲーム自身の診断表示を確認しましょう。フレーム時間、表示されたping、パケット損失の指標、サーバー地域、オフラインでも起きるかを記録します。pingは通常、往復時間を示します。あらゆるゲーム通信の片道時間と、自動的に同じになるわけではありません。
通信の少ない接続と、混雑した接続を比較し、可能なら有線でも試します。ダウンロード速度が高いだけでは、低遅延、安定した到着、対戦中ずっと良好な条件だったことは証明できません。必要な帯域幅も、ゲームの設計によります。
同じ反応の遅れがオフラインでも出るなら、手元の入力から画面までの経路も調べましょう。一試合だけの問題なら、時刻と利用できる試合IDを残すと、有用な不具合報告になります。
良いネットコードは、制約の中で食い違いを管理します。距離を消したり、すべての機器を同じ瞬間に動かしたりはできませんが、設計上の選択によって、その違いによる支障を大きく減らせます。
2026-06-24公開の英語版の記事を日本語に翻訳しました。翻訳日:2026年10月30日。翻訳にはAIを使用し、記事内の時点は原文に合わせています。




