Unreal Editor でネットワーク オプションをテストする
Unreal Editor には、マルチプレイヤー プロジェクトのテストに役立つ設定があり、これらの設定は調整することができます。こういったオプションには、[Number Of Players (プレイヤー数)]、複数の プレイ ウィンドウ の実行、専用サーバー の実行の設定があります。
これらの設定を表示するには、エディタ を起動して、ツールバー に移動し、[Play (プレイ)] ボタンの隣にある [Modes (モード)] ドロップダウン矢印を選択します。

エディタでマルチプレイヤー設定を調整する方法の詳細については、「マルチプレイヤー ゲームをテストする」を参照してください。
専用サーバーを起動する
マルチプレイヤー ゲームを起動するには、複数の方法があります。個別の専用サーバー インスタンスを起動するには、次の手順を実行します。
- [Modes] ドロップダウン矢印から [Advanced Settings (詳細設定...)] を選択するか、[Editor Preferences (エディタの環境設定)] > [Level Editor (レベル エディタ)] > [Play (プレイ)] > [Multiplayer Options (マルチプレイヤー オプション)] を選択します。

- [Multiplayer Options] カテゴリで [Launch Separate Server (別のサーバーを起動)] 変数に移動してチェックボックスをオンにし、ブール値を true にします。

- [Play Net Mode (プレイネット モード)] 変数の横にあるドロップダウン メニューをクリックして、[Play Standalone (スタンドアローンでプレイ)] を選択します。

これで新しいサーバー インスタンスが作成されます。ただし、他のインスタンスは、このサーバー インスタンスに自動的に接続されません。
スタンドアローン サーバー インスタンスに接続する
次のコマンドを使用すると、スタンドアローン インスタンス を サーバー に接続できます。
open 127.0.0.1:<port number>
また、 Session インターフェース を使用することもできます。このインターフェースでは、他のクライアントが検出して参加できる、サーバー上で実行されるゲームのインスタンスを作成します。これは、プロジェクトの接続フローをテストするのに役立ちます。
[Play Net Mode] 変数が [Play as Client (クライアントとしてプレイ)] に設定されている場合は、[Launch Separate Server] 変数を有効にする必要はありません。専用サーバー インスタンスを起動する必要がないためです。

エディタの [Play Net Mode] オプションで [Play as Client] または [Play As Listen Server (リッスン サーバーとしてプレイ)] を使用すると、これらのインスタンスが自動的に IP アドレスで直接相互に接続されます。これは、クライアント に対して open 127.0.0.1:17777
コマンドを実行して、サーバー に接続する処理に相当します。
この接続プロセスでは、Session インターフェース を使用しないため、サーバーがオンライン マルチプレイヤー セッションを作成することはなく、クライアントがこのセッションを検索して参加することもありません。ゲームプレイのテストを目的とする場合、これらどちらの方法を使用しても、多くの場合、違いはありません。ただし、ボイス チャットなど、Session インターフェースを活用する特定のオンライン機能は利用できません。
[Run Under One Process (1 つのプロセス下で実行)] 変数の横にあるチェックボックスをオンにすると、すべてのクライアント インスタンスとサーバー インスタンスが、エディタと同じ ティック レート を共有します。

これは、これらのインスタンスを個別に実行する場合とは動作が異なります。その一例として、スタンドアローン モード では、「BaseEngine.ini」ファイルにある NetServerMaxTickRate の設定値を使用して、サーバーのティック レートを制御することができます。
[/Script/OnlineSubsystemUtils.IpNetDriver]
NetServerMaxTickRate=30
これは、1 回のネット更新に対する帯域幅の制限の計算など、ティック レートを使用する特定の動作に影響することがあります。
プレイ イン エディタ (PIE) を使用している場合は、 サーバー/クライアントの移動 などの機能に制限があります。これらの機能をテストするには、プロジェクトをエディタ外で個別のプロセスとしてスタンドアローン モードで実行する必要があります。
個別のプロセスでインスタンスを実行している場合、1 つのインスタンスがプレイ イン エディタとみなされ、その他のインスタンスはスタンドアローンとみなされます。これは、すべてのインスタンスが均一にプレイ イン エディタかスタンドアローンとして動作する場合とは、動作が異なることがあります。たとえば、パスがネットワークを経由して送信されるスタティック アクタに remove または PIE というプレフィックスを追加するには、UEditorEngine::NetworkRemapPath 関数を呼び出す必要があります。
複数のクライアント インスタンスおよびサーバー インスタンスをデバッグする
複数のクライアント インスタンスおよびサーバー インスタンスの実行には、固有の課題があります。特に課題となるのが、アタッチ先のインスタンスの把握です。PIE インスタンスのデバッグにブレークポイントを使用することで、こういった課題を緩和することができます。
コード エディタでは、次の変数を Watch ウィンドウに追加できます。
Watch 変数 | 使用 |
---|---|
UE4Editor-Engine!GPlayInEditorContextString | 現在、どのインスタンスをステップ スルーしているかを特定します。 |
NetDriver's ServerConnection | クライアントでは、これはサーバーへの NetConnection への参照を保持します。サーバーでは、この値は Null に設定され、レプリケーション システムのデバッグ時に、ユーザーが使用しているインスタンスをすぐに確認することができます。 |

さらに、Watch にGetLocalRole() 関数への呼び出しを配置するか、コードでこの関数を直接呼び出すことで、アクタの Role プロパティを確認することができます。GetLocalRole 関数は、インスタンスのこのアクタに対するコントールの度合いを返します。レプリケートされたアクタ内の問題をデバッグしている場合は、次の 3 つのロールのうちの 1 つを返します。
ロール | 説明 |
---|---|
ROLE_Authority | サーバー インスタンスに存在するアクタ。 |
ROLE_AutonomousProxy | 当該クライアント インスタンスのローカル PlayerController が所有するキャラクターまたはポーンであるアクタ。 |
ROLE_SimulatedProxy | クライアント インスタンスに存在するアクタ。 |
ネットワーク ゲームをプロファイリングする
Networking Insights を使用すると、ネットワーク ゲームをプロファイリングすることができます。Networking Insights は、Unreal Insights プロファイリング ツールのコンポーネントで、プロジェクトのネットワーク トラフィックの分析、デバッグ、最適化に役立つ詳細情報を提供します。
このツールの [Packet Overview (パケット概要)] パネルの各列は、単一のパケットに対応しており、[Packet Content (パケット コンテンツ)] パネルでは、コンテンツ、オフセット、サイズなどのデータをはじめ、選択したパケットの各要素を全体的に把握することができます。

パケット上にマウスをかざすと情報が表示されます
[Net Stats (ネット統計)] パネルでは、ネットワーキング トレース イベントに関する情報 (イベント数、ビット単位の合計/最大の包括サイズ) が提供されます。また、表示されているイベントはイベントの作成元に基づいてレベル別に整理されています。Networking Insights の設定と使用方法の詳細については、「Networking Insights」を参照してください。

レベルごとにイベントをグループ化した Net Stats パネル
Unreal Engine は、プロジェクトのネットワーク トラフィックをさまざまな観点で確認できる従来のツール Network Profiler も備えています。Network Profiler が提供する情報は、Networking Insights ほど詳細ではないものの、ゲームの帯域幅の使用状況や、個々のアクタ、プロパティ、RPC の統計情報など、概要情報を提供します。
Gauntlet Automation Framework
Gauntlet Automation Framework は、サーバー、クライアントなどの複数のセッションの起動に対応しており、マルチプレイヤー プロジェクトのテストや検証で非常に役立つツールです。
ShooterGame プロジェクトには、マルチプレイヤー ゲーム用の Gauntlet を使用した自動化スクリプトの実装サンプルがあります。このサンプルには、「Build/Scripts
」フォルダにある、テストを制御する ShooterGame 自動化 C# コードと、「Source/ShooterGame/Private
」ディレクトリと「Public/Tests
」ディレクトリにある、プロジェクトのネイティブ テスト コントローラー コードが含まれています。
機能テスト
UE には、 レベル ブループリント を使用して 機能テスト を設定して実行する機能があります。機能テストは、最初はプロジェクトの 1 つのインスタンスに対して実行する必要があります。その後、これらのテストをマルチプレイヤー プロジェクトで実行することができます。テストを含むレベルは、単一のクライアント インスタンス、専用サーバー、またはリッスン サーバー インスタンスで開始できます。
クライアントとサーバーの両方など、複数のインスタンスで実行する機能テストの設定は、現在サポートされていません。目的の機能が動作 しない 例としては、サーバーが Replicated プロパティに新しい値を設定した場合に、クライアントがこの新しいレプリケートされた値を受信したかどうかを確認するシナリオが挙げられます。