ネットワークスムージングの実装


13

多重一人称シューティングゲームを作成しています。クライアントは、その位置を固定レート(現在は10Hz)でサーバーに送信します。サーバーは、すべてのプレーヤーの位置を含む単一のメッセージをすべてのプレーヤーに同じレート(10Hz)で送信します。

予想どおり、60fpsゲームは1秒間に10回しか更新を受信しないため、動きはかなり不安定です。この動きをスムーズにする最良の方法は何ですか?最も明らかな方法は、最後の2つのパケット間を補間することです。これにより、新しいパケットを受信すると補間が終了します。ただし、これにより、すべてのプレーヤーに100ミリ秒の遅延が瞬時に追加されます。

他の方法は、最後のいくつかのパケットから推測された速度と加速度を使用して、次のパケットが到着する前にプレーヤーがどこにいるかを予測することですが、予測が間違っている場合、プレーヤーは新しいパケットが受信されるとすぐにジャンプする傾向があります。

AAAタイトルがこの問題をどのように解決するか知っていますか?

回答:


9

彼らはあなたがちょうど言ったことを正確に行います-これらの2つのアプローチのいずれか、またはそれらの間の何らかの妥協。(たとえば、可能な限り小さな遅延を受け入れて補間し、pingがその遅延を超えると外挿します。)修正された位置にジャンプ(「スナップ」とも呼ばれます)する代わりに、通常、間違った予測間の何らかの補間を行います。可能な場合は、補正された値を平滑化します。また、過去に修正を処理して、適用する必要のある修正の量を減らします。

これはよくある質問であり、検索するとおそらくgamedev.stackexchange.comの他の場所にある正規のリンクがいくつかあり、それらには以下が含まれます。

すべてのプログラマーがゲームネットワーキングについて知っておくべきこと(これは次の2つのリンクの内容を要約しています)

ソースマルチプレイヤーネットワーキング

アンリアルネットワーキングアーキテクチャ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.