ゲームフレーム同期のプロセスと実現

概要

  • フレーム同期の基本原理
  • フレームイベントデータ収集
  • フレーム同期のイベント処理とアニメーション
  • フレーム同期のためのロジックデータ同期
  • フレーム同期のためのフレームスキップ処理

最新のマルチプレイヤーゲームでは、複数のクライアント間の通信のほとんどは、マルチパーティの状態を主な目標として同期することです。この目標を達成するために、2つの主な技術的方向性があります。

  • 状態の同期
  • フレーム同期

状態の同期

状態の同期とは、ゲーム内のさまざまな状態を同期することを意味します。クライアントがゲームアクションをサーバーに送信すると、サーバーはそれを受信し、ゲームの動作の結果を計算して、ゲーム内のさまざまな状態データをクライアントにブロードキャストします。クライアントは、ステータスデータを受信した後にコンテンツを表示します。このアプローチは、各クライアントがサーバー上のソフトウェアをリモートで操作する方法と似ています。たとえば、最も高い泥、そして将来の多数の国内オンラインゲーム、特にターン制のゲームは、主にこの方法を使用します。

状態同期のプロセス:

  1. サーバーへのクライアントのアップロード操作
  2. サーバーは、ゲームの動作の結果を受け取った後に計算します(スキルロジック、戦闘計算など)。
  3. サーバーはゲーム内のさまざまな状態をブロードキャストします
  4. ステータスを受け取った後、クライアントはローカルステータス(アクションステータス、バフステータス、場所など)を更新します。

ゲーマーにより良いエクスペリエンスを提供し、同期されるデータの量を減らすために、クライアントはサーバーの同期の頻度とデータの量を減らすために多くのローカル操作も実行します。

状態の同期は実際には不正確な同期です。その考えでは、各操作の結果が同じである限り、画面上のさまざまなプレーヤーの一貫したパフォーマンスは重要な指標ではありません。したがって、状態の同期には高いネットワーク遅延は必要ありません。たとえば、RPGゲームでの200〜300ミリ秒の遅延はユーザーには許容されますが、RTS(リアルタイムストラテジー)ゲームでの50ミリ秒の遅延は問題になります。

フレーム同期

フレーム同期は、RTSゲームでよく使用される同期テクノロジーです。状態同期のデータ量は、同期する必要のあるユニットの数に応じて増加します。RTSの場合、毎ターン数百のユニットを操作できます。同期済み、データ量が許容できないため、フレーム同期が同期状態、つまり同期操作から外れています。例えば、ゲームでは、プレイヤーの操作指示が同期され、操作指示には現在のフレームインデックスが含まれます。

簡単に言うと、クライアントはゲームアクションをサーバーに送信し、サーバーはそれらを受信して​​集約し、すべてのクライアントに直接転送するか、クライアントがP2Pテクノロジーを介して直接送信します。クライアント端末は、受信したゲームアクションに応じて計算と表示を行います。このアプローチは、クライアント間で他のクライアント上のゲームソフトウェアを相互にリモート制御することと同等です。Red Alert、Age of Empires、StarCraftなどの初期のipxオンラインゲーム、およびネットワーク接続をサポートする多数のdoublesゲームコンソールシミュレーターはすべて、この方法を使用します。

フレーム同期を使用する必要があるゲームはどれですか?

  • マルチプレイヤーリアルタイムバトルゲーム
  • ゲームにはバトルリプレイ機能が必要です
  • ゲームでの加速の必要性
  • 不正行為を防ぐためにサーバー同期ロジックチェックが必要

フレーム同期プロセス

  1. 同期された乱数シード:ゲームでは乱数の使用が設計されており、乱数シードを同期することで乱数の一貫性を維持できます。
  2. クライアントはサーバーに操作指示をアップロードし、操作指示にはゲーム操作と現在のフレームインデックスが含まれます。
  3. ゲームはすべてのクライアント操作をブロードキャストし、操作がない場合は、ゲームフレームを進めるためのnullコマンドもブロードキャストします。

フレーム同期

フレーム同期は主にクライアントの能力に依存します。サーバーは転送のみを行い、クライアントでさえサーバーなしでP2Pを介してデータを転送できます。ゲームの動作を転送するだけなので、ブロードキャストデータの量は状態同期の量よりもはるかに少なくなります。フライングシューティング、FPS、RTS(リアルタイムストラテジー)など、ゲームの動作が非常に頻繁なアクションゲームに非常に適しています。

状態の同期ゲーム全体の状態をブロードキャストする必要があるため、画面いっぱいの弾丸やモンスターなど、ゲーム内のオブジェクトが多すぎると、ブロードキャストされるデータの量が非常に多くなります。フレーム同期のメリットはより明白です。「マシン制御のキャラクター」がいくつあっても、プレイヤーのキャラクターに関連する操作をブロードキャストするだけで済みます。逆に、同時に多数のプレイヤーがゲームに集まる場合、フレーム同期と状態同期の違いはあまり明白ではありません。逆に、ゲームはサーバー上で計算されるため、状態の同期によりセキュリティが向上し、プラグインを防ぐのが簡単になります。

簡単に言えば、フレーム同期技術の最も重要な概念は、「同じ入力+同じタイミング=同じ表示」です。つまり、ゲームはネットワーク上の複数のクライアントから操作を受け取ります。これらの操作が各クライアントで同じである場合、複数のクライアントの表示は同じになり、「同期」の効果がもたらされます。この場合、各クライアントの操作は完全に一貫している必要があり、現地時間、ローカルランダムなどの「入力」に依存することはできませんが、ネットワークからのすべてのデータが主力である必要があります。

フレーム同期

フレーム同期機能により、バトル再生が容易になります。つまり、サーバーがすべての操作を記録し、クライアントが操作ファイルに再実行を要求します。フレーム同期の特性により、クライアントのロジック実装とパフォーマンス実装が完全に分離されます。

フレーム同期の目的は、ネットワークの不安定さや突然の速度と速度の低下によるプレーヤーのスタッターを排除することです。

ネットワーク変動のスムーズな処理

状態同期とフレーム同期の比較と選択

より多くのユニットを備えたリアルタイム戦略ゲームの場合、フレーム同期は良い選択です。逆に、プレーヤーの数が多い場合は、セキュリティが高いため、状態の同期がより適切です。一般に、大規模なMMOARPGは状態同期を採用しています。状態同期はC / Sアーキテクチャを採用しているため、すべての状態はサーバーによって制御されます。セキュリティは比較的高くなりますが、トラフィックは比較的大きくなります。フレーム同期はプリズナーモードを採用し、すべてのC端末は一貫した出力を確保するために論理フレームレートを採用することを余儀なくされています。これは、トラフィックが少なく、セキュリティが低いという特徴があります。

囚人モードはロックステップモードとも呼ばれ、戦闘に参加しているすべてのクライアントを連続した囚人として扱います。これらの囚人の左足はチェーンで接続されています。前進したい場合は、次の場所でのみ前進できます。同時に、そのうちの1人が速くまたは遅く歩いたとき、全員がチーム全体を止めました。

状態同期とフレーム同期の比較

フレーム同期の基本原理

フレーム同期は、同期ソースのピクセルレベルの同期表示を実行する処理技術です。ネットワーク上の複数のアクセサーの場合、信号はホストを介して他のユーザーに同期的に送信され、各端末に同期的に表示されます。同期信号は、各フレームのピクセルデータにすることも、データの変更に影響を与える重要なイベント情報にすることもできます。

オンラインゲームアプリケーションのフレーム同期の設計は、従来のMMORPGゲームとは異なり、スタンドアロン効果を実現するために多数のバックグラウンド計算を実行できるため、射撃や飛行ゲームで使用して、弾幕計算や戦闘ゲームを実現できます。 。精密ブロー効果。

フレーム同期とは何ですか?サーバーは、クライアントの携帯電話から送信された操作を収集し、特定の時間(収集が完了した後)に各クライアントにブロードキャストします。クライアントは、受信した入力に従って同じ論理処理を実行し、最終的に同じ結果を取得します。実装に関しては、サーバーは通常、固定フレームレートで各クライアントの入力を収集し、これらの入力をすべてのクライアントにブロードキャストします。各操作命令がすべてのクライアントに到達するまでの時間(フレーム)が同じであるため、各クライアント操作の結果も同じです。つまり、同じ入力でも同じ結果が得られます。

これは、プレーヤーがネットワークを介してジョイスティックを携帯電話に接続するかのようです。この同期スキームは、従来のスタンドアロンLANゲームで最も一般的です。

フレーム同期

フレーム同期モデルの最大の利点は、強力な一貫性です。各クライアントのパフォーマンスはまったく同じであり、高い操作スキルを必要とするゲームに非常に適しています。ブロードキャストはプレーヤーの操作のみであるため、データ量は非常に少なくなります。ゲーム内のキャラクター数や状態数に関係なく、ブロードキャストデータの量には影響しません。

フレーム同期モデルの最大の欠点は、すべてのプレーヤーの遅延が必要なことです。一般的に、50ミリ秒以内である必要があります。クライアントネットワークがスタックした場合、すべてのクライアントが停止して待機する必要があります。

さらに、フレーム同期モードでは、データ同期の頻度が高くなり、ネットワーク遅延が可能な限り小さくなります。TCPのスライディングウィンドウメカニズムと再送信メカニズムにより、遅延メカニズムが発生し、遅延を制御できません。したがって、フレーム同期は通常、ネットワーク送信にUDPを使用しますが、UDPは信頼性の問題を引き起こします。クライアントの場合、一部のUDPパケットが受信されないと、フレーム損失が発生します。

フレーム同期技術の原則

クライアントAの操作A1とクライアントBの操作B1は、OperaCmdデータに共同でカプセル化され、PVPサーバーに送信されます。PVPサーバーは66ミリ秒ごとに論理フレームを生成します。フレームの期間中、A1とB1を受信した後、フレームデータブロックを生成し、フレーム時間の終わりに、フレームはクライアントAとBに送信されます。フレームデータブロックには、フレームのフレーム番号が含まれています。クライアントAとBは、フレームデータを受信すると、クライアントAとクライアントBがフレーム内で実行した操作を認識します。次に、受信したメッセージA1とB1に従ってゲームのパフォーマンスを実行し、最後にプレーヤーAとBに提示される結果に一貫性を持たせることで、クライアントAとBの間のデータ同期を実現します。

フレーム同期

フレーム同期は特定の時間に送信されるため、つまり、定期的にユーザーの操作指示を収集するため、その間隔はどのくらいにする必要がありますか?たとえば、定期的にユーザー操作を検索します。このとき、時間が速すぎるとネットワーク速度が要件を満たせず、時間が長すぎるとユーザー操作が流れません。より適切な場所はどこですか?統計によると、プレイヤーは50msと100msに少なくとも1回は完了する必要があり、一般的には約1520回まで維持する方が安全です。



著者:JunChow520
リンク:https://www.jianshu.com/p/8cca5458c45b
出典:ジェーンの本
は著者が著作権を所有しています。商用の転載の場合は、著者に連絡して許可を求め、非商用の転載の場合は、出典を示してください。

おすすめ

転載: blog.csdn.net/wdglhack/article/details/109965636