1秒間に必要な更新は約30(またはさらに少ない場合は10または20)です。クライアント側の移動オブジェクトの位置を補間します。一般的に、本当に必要な場合にのみデータを送信する必要があります。WoWでは、同じ場所にいるプレイヤーよりも、グループにいるプレイヤーからより多くの更新を受け取ることがあります。また、他のプレイヤーがあなたから遠く離れている場合、そのプレイヤーに関する1秒あたりの更新数は多くなりません。
次に、各プレーヤーが接続するときに、完全なスナップショットを1つだけ送信します。その後、ゲームオブジェクトの変更のみを送信します。変更が発生していない場合は、送信しないでください。
次に、BitVectorsを頻繁に使用するか、不要なデータの量を減らすためにBitVectorsを呼び出します。例:1バイトのみ(0から1または-1から1の範囲)を使用してfloatを書き込もうとすると、256または128の異なる値しかありません。しかし、補間のおかげで、プレイヤーはぎくしゃくした動きに気付かないでしょう。
データの圧縮方法に関するLidgrenLibraryの例については、こちらをご覧ください:http ://code.google.com/p/lidgren-network-gen3/wiki/Optimization
次:プレーヤーが移動するときの表示半径を減らし、その時間に重要な情報のみを送信するようにします。その後、停止すると、表示半径が再び増加します。空間ハッシュシステムまたはbspツリーを使用して、「範囲内」にあるオブジェクトを検索するオーバーヘッドを削減できます。これは、トピックの良い読み物です:http : //en.wikipedia.org/wiki/Collision_detection
また、データ圧縮、自分でだけでは、データ構造と(とすべきで悪用される可能性があります)データの時間的コヒーレンスについて知っているが。Bzip2、Deflateなどの一般的なアルゴリズムを使用する必要がありますが、圧縮の最終段階としてのみ使用してください。
また、ゲームに重要でない情報については、追加のP2Pテクニックを使用することもできます。例:プレーヤーは「hello」アニメーションを再生します。(グラフィック効果のみ)プレーヤーはこの情報をサーバーに送信しますが、サーバーは他のプレーヤーに情報を中継しません。その代わり、この重要ではない効果は、プレイヤー自身によって範囲内の他のクライアントに送信されます。
編集(コメントのため):
各プレーヤーの1秒あたりの平均ビット数を減らす追加の方法:
「オブジェクトは変更されませんでした」というメッセージを送信しました。これを行う理由はありません。パケット損失を心配する場合(そして、このためにシミュレーションが同期しないようにする場合)、以下を考慮してください:各固定タイムステップ(例:100、200、300、400 ...)でシミュレーション状態をハッシュし、サーバーに送信します。サーバーは、すべてのデータの完全なスナップショットを確認または送信します。
ロケットやプレーヤーのようなものについては、シミュレーションをより現実的にするために、補間だけでなく外挿も使用できます。例 'Rocket':「Is now at position x」などのメッセージで更新する代わりに、次の内容を含むメッセージを1回送信するだけです。「Rocket Spawned:position(vector)、Time(at which step step the rocket is spawned))、velocity(ベクター)"。先端は常に「速度」方向になるため、回転を含める必要さえありません。
1つのメッセージに複数のコマンドを組み合わせて、udpヘッダーがメッセージ自体よりも大きくなるため、16〜20バイト未満のメッセージを送信しないでください。また、プロトコルのMTUよりも大きいパッケージを送信しないでください。断片化により、転送速度が遅くなります。