1 台のマシンでマルチプレイヤー ゲームをテストするには、ゲームの複数のインスタンスを実行して、1 つのインスタンスをサーバーとして、その他のインスタンスをクライアントとして実行する必要があります。この方法では、通常、レプリケートされたデータに理想的な環境が構築されます。レプリケートされたデータは、実際のネットワーク環境と同じように該当するシステムを通過するものの、遅延やパケット ロスが発生しないため、エンドユーザーの環境にデプロイされた際にどのように動作するかを正確に把握することができません。同様に、LAN ベースのテストでも、このような条件を再現することはできません。
ネットワーク エミュレーション では、サーバーおよびクライアントの遅延やパケット ロスをシミュレートします。これは、ネットワーク環境で発生する可能性のある問題を特定するうえできわめて重要です。ネットワーク エミュレーション設定は Unreal Editor、コマンドライン、コンソール、コンフィギュレーション ファイルで設定できます。
ネットワーク エミュレーションの有効化
Unreal Editor
ネットワーク エミュレーションを使用するには、メニュー バー から、[Edit (編集)] > [Editor Preferences (エディタの環境設定)] > [Level Editor (レベル エディタ)] > [Play (プレイ)] > [Multiplayer Options (マルチプレイヤー オプション)] に移動して、[Enable Network Emulation (ネットワーク エミュレーションの有効化)] チェックボックスをオンにします。これで、ネットワーク エミュレーションの設定が有効になります。
エディタには、事前ビルドの [Network Emulation Profiles (ネットワークエミュレーションプロファイル)] があり、[Custom]、[Average]、[Bad] を指定できます。これらのプロファイルでは、次の指定フィールドを使用して、ネットワーク エミュレーション設定をカスタマイズします。
- Incoming Traffic (受信トラフィック): 到着するパケットに遅延や損失が発生します。
- Minimum Latency (最小レイテンシー): ミリ秒単位の最小遅延時間 (
PktIncomingLagMin
に対応) - Maximum Latency (最大のレイテンシー): ミリ秒単位の最大遅延時間 (
PktIncomingLagMax
に対応) - Packet Loss Percentage (パケット損失率): 受信する前にパケットが失われる確率 (
PktIncomingLoss
に対応)
- Minimum Latency (最小レイテンシー): ミリ秒単位の最小遅延時間 (
- Outgoing Traffic (送信トラフィック): 送信するパケットに遅延や損失が発生します。
- Minimum Latency: ミリ秒単位の最小遅延時間 (
PktLagMin
に対応) - Maximum Latency: ミリ秒単位の遅延時間 (
PktLagMax
に対応) - Packet Loss Percentage: 送信される前にパケットが失われる確率 (
PktLoss
に対応)
- Minimum Latency: ミリ秒単位の最小遅延時間 (
コマンドライン
次の構文を使用して、コマンドライン引数で設定を指定できます。
<SETTING_NAME>=<VALUE>
Console (コンソール)
次の構文を使用して、ランタイム時にコンソールから設定を指定できます。
NetEmulation.<SETTING_NAME> <VALUE>
コンフィギュレーション ファイル
エンジンのコンフィギュレーション ファイル (DefaultEngine.ini
など) から値を設定するには、[PacketSimulationSettings]
セクションを対象のコンフィギュレーション ファイルに追加し、次のとおり、指定する <SETTING_NAME>=<VALUE>
ペアを続けます。
[PacketSimulationSettings]
<SETTING_NAME>=<VALUE>
<SETTING_NAME>=<VALUE>
...
設定のリファレンス
各設定は、ネットワーク エミュレーションをカスタマイズするため、組み合わせて使用できます。
設定項目 | 説明 | 値 |
---|---|---|
Off |
ネットワーク エミュレーションをオフにします。 | 切り替えコマンド。値は不要。 |
PktLoss |
パケット ロスをシミュレートするために、送信パケットが破棄される確率 (%) を指定します。 | 0 (パケットの破棄なし) から 100 (すべてのパケットを破棄) にクランプされた値。 |
PktOrder |
パケットの順序をランダムに変更します。次の FlushNet への呼び出しまで、遅延するパケットをランダムに選択します。 |
0 = False、他の値 = True |
PktDup |
送信パケットが複製される確率 (%) を指定します。 | 0 (パケットの複製なし) から 100 (すべてのパケットを複製) にクランプされた値。 |
PktLag |
パケットの送信をミリ秒単位で指定した時間だけ遅延させます。注: PktOrder と一緒には使用できません。 |
値 (ミリ秒単位)。 |
PktLagVariance |
ミリ秒単位の一定時間ではなく、ランダムな変動値でパケット遅延を発生させます。設定すると、遅延は [PktLag - PktLagVariance, PktLag + PktLagVariance] の範囲のランダム値になります。注: 有効になるのは、PktLag が有効なときだけです。 |
値は [-Variance, Variance] の範囲からランダムで選択されます。 |
PktLagMin |
最小時間でパケットを遅延させます。 | 値 (ミリ秒単位)。 |
PktLagMax |
最大時間でパケットを遅延させます。 | 値 (ミリ秒単位)。 |
PktIncomingLagMin |
受信側でパケットを最小時間遅延させます。 | 値 (ミリ秒単位)。 |
PktIncomingLagMax |
受信側でパケットを最大時間遅延させます。 | 値 (ミリ秒単位)。 |
PktIncomingLoss |
パケット ロスをシミュレートするために、受信パケットが破棄される確率 (%) を指定します。 | 0 (パケットの破棄なし) から 100 (すべてのパケットを破棄) にクランプされた値。 |
PktJitter |
PktJitter の値に、一定範囲のパケット遅延時間を加算することで、変動幅のあるレイテンシーでパケットを送信します。 |
値 (ミリ秒単位)。 |
PktEmulationProfile |
事前定義エミュレーション プロファイルを設定します。 | プロファイルの名前。 |
使用方法に関する推奨事項
マルチプレイヤー ゲームが最適な接続環境で実行されている場合、接続性に問題があるときにのみ生じるバグの多くは発生しません。これらのバグを確実に検出するため、ローカル テストや LAN ベース テストは、きわめて厳しい条件で実行してください。次に例を示します。
- ping のラウンド トリップ タイム:500 ms
- パケット損失率:10% 以上
Epic Games では、このような条件で、連携ゲームプレイや対戦ゲームプレイのテストを実施しています。これにより、その他のテスト方法では見過ごされる可能性のある数多くのバグやエクスプロイトを検出できるため、ネットワーク パフォーマンスの最適化を強化することができます。