帯域幅の最小化

このページはVersion 2017.30f3 Personalを対象としています。

更新履歴

参考URL

概要

旧ネットワークで通信量を削減する方法には、 NetworkViewコンポーネントのStateSynchronizationを適切に設定する、 Relevant Sets(関連セット)を使う、 コミュニケーショングループを使う、 といった方法があります。

StateSynchronization

NetworkViewコンポーネントのStateSynchronizationでは、 NetworkStateSynchronization列挙型の次の値が指定できます。

Off=0何も送信しない
ReliableDeltaCompressed=1確実な同期モードで欠損したパケットは自動的に再送される。到着順番も保証される。変化がない情報は送信しない。
Unreliable=2常に情報を送信するがパケットの欠損は保証しないので情報が届かないこともある。

ログインしているプレイヤーのほとんどが離席しているMMORPGのようなゲームでは、 停止しているキャラクターの通信量を削減できるReliableDeltaCompressedのほうが向いていると思います。 ただし、キャラクターの位置を送受信する場合、 停止している間送受信が行われないので、 後からログインしたプレイヤーに位置を伝えるために、 RPCなど別の方法で適切に位置を伝える必要があります。

Relevant Sets(関連セット)

例えばあるサーバーにクライアントがn人接続して歩き回るとすると、 何も工夫しなければサーバーから全クライアントに送信するデータは、 クライアントが1人の場合のn*(n-1)倍程度になってしまいます。

それを避ける工夫の一つに、 距離が離れていて視界に入らないキャラクターの情報を送信しないというのがあります。 UnityではNetworkviewコンポーネントのSetScopeメソッドを使って実現します。

使い方としては、 サーバー側であるクライアントのキャラクターと別のクライアントのキャラクターとの距離を調べ、 十分に離れている場合、 そのクライアントのキャラクターのNetworkView.SetScopeメソッドで、 引数playerを別のクライアントのNetworkPlayerに、 引数relevanceをfalseに指定します。

uLinkの記事ですがこのページが参考になるかも。

コミュニケーショングループ(調査中)

NetworkView.group
Network.SetReceivingEnabled
Network.SetSendingEnabled

戻る

inserted by FC2 system