ネットワーク状況のシミュレーション
概要
ローカルでネットワークコードをテストする場合は、常に実際の環境(または実際より遅延やロスが大きい環境)でテストすることが望ましいです。優れたネットワークゲームの設計には、プレイヤー間の矛盾や時間差をどのように隠すかに、多くの時間が費やされます。実際に近い環境でテストすることにより、ネットワークコードにおける実際のプレイヤー体験を把握することができます。
そのためには、実際のインターネット接続環境でテストを実行するか、ローカルでビルドやテストができるような開発パイプラインを整備する必要があります。
Fusionには、ネットワーク状況をシミュレーションする機能が組み込まれており、fusion.dll
のデバッグ版で使用することができます。リリース版のDLLを使用している場合は、Clumsy for Windowsのような外部ソフトウェアを使用してください。
組み込みのネットワーク状況機能
組み込みのNetwork Conditionsは、Delay(遅延)とLossの発振器・乱数生成器の組み合わせで動作します。発振器によって、DelayとLossの値が時間と共に変化するシミュレーションや、断続的な輻輳のような非常に悪条件のシミュレーションが可能になります。最小値と最大値を一致させれば、値が変動しない固定値でのテストも可能です。
機能の有効化
NetworkProjectConfig
(UnityのメニューのFusion > Network Project Config
)を開きますNetwork Conditions
という名前の項目を探します(項目が見つからない場合、リリース版のfusion.dll
を使用している可能性が高いです。UnityのメニューのFusion > Toggle Debug Dlls
から、デバッグ版のDLLに切り替えてください。注意: 変更を反映するために、Unityエディターの再起動が必要な場合があります。)Enabled
を設定して、ネットワーク状況のシミュレーションを有効/無効にします
設定
Network Conditions
- Enabled:ネットワーク状況のシミュレーションが有効かどうか
- Delay Shape:
DelayMin
とDelayMax
間の波形パターン - Delay Min:
DelayShape
で返される、パケット遅延の最小値 - Delay Max:
DelayShape
で返される、パケット遅延の最大値 - Delay Period:
DelayShape
の周期(秒単位) - Delay Threshold:しきい値未満の値は0(
DelayShape
は0から1で振動)になり、DelayMin
が返されます - Additional Jitter:
DelayShape
の値に、0からAdditionalJitter
の乱数値が追加されます - Loss Chance Shape:
LossChanceMin
とLossChanceMax
間の波形パターン - Loss Chance Min:
LossChanceShape
で発生する、パケット損失率の最小値(0 = 損失率0%、1 = 損失率100%) - Loss Chance Max:
LossChanceShape
で発生する、パケット損失率の最大値(0 = 損失率0%、1 = 損失率100%) - Loss Chance Threshold:しきい値未満の値は0(
LossChanceShape
は0から1で振動)になり、LossChanceMin
が返されます - Loss Chance Period:
LossChanceShape
の周期(秒単位) - Additional Loss:
LossChanceShape
で発生した損失率に、0からAdditionalLossの(正規化された)乱数値が追加されます
ホストモード / サーバーモード
組み込みのNetwork Conditionsは、各ピアでは、指定した値の半分が適用されます。この値は、サーバーとクライアントの両方で適用されるため、結果的に遅延する値は設定とほぼ同じになります。つまり、200msの遅延は、以下のようになります。
- サーバーは、パケットを約100ms遅延させる
- クライアントも、パケットを約100ms遅延させる
共有モード
共有モードでは、クライアントは常にPhotonのゲームサーバーにオンラインで接続します。ローカルクライアントでも実際のプレイ環境と同じ体験になるため、テスト時にネットワーク状況をシミュレーションする必要はありません。
ただし、現在の接続状況よりも悪い状況をシミュレーションするために、遅延やロスを追加したいこともあります。共有モードでは、クライアントのみで遅延とロスが適用されるため、設定値の半分しか実際に適用されないことに注意してください。そのため、共有モードでテストする場合は、設定値を2倍にしてください。さらに共有モードでは、オンラインで接続していることで既に自然に発生している遅延に、設定値が追加される形になります。
サードパーティーのソフトウェア
リリース版のfusion.dll
を使用している場合でも、ネットワークトラフィックの遅延や障害を発生させるサードパーティー製アプリを使用して、ネットワーク状況をシミュレーションすることが可能です。
Windowsでは、Clumsyが、ネットワーク状況をシミュレーションする最も一般的なサードパーティー製アプリになります。
フィルタリング文字列のudp and outbound
は、ほとんどのユースケースで機能します。仕様の詳細は、Clumsyのドキュメントをご覧ください。
注意: 使用中のポートとIPアドレスを把握しておく必要があります。