概要
Unreal Engine (UE) ではマルチプレイヤーのネットワーク ゲームに クライアント サーバー モデルを採用しています。1 台のサーバーがゲームの ホスト として働き、プレイヤーがこのホストに クライアント として接続します。真のゲーム ステートはサーバーで管理され、これによりサーバーは 権限のあるホスト と呼ばれます。各プレイヤーは 自動プロキシ で自分のポーンをコントロールします。このサーバーは、接続された各クライアントに対する真のゲーム ステートをシミュレートするため、接続された各クライアントからの変更を レプリケート します。実際にはサーバーでプレイしているゲームが、クライアントでほぼ再現されます。
専用サーバー
Listen サーバー は、マシンでゲームをホストし、サーバーとして働くクライアントがなります。他のクライアントはホスト クライアントに接続し、ホスト クライアントのインスタンスでゲームをプレイします。このモデルでは、ホスト クライアントが 権限のあるホスト です。これにより接続するクライアントより有利になります。真のゲーム ステートでアクティブにプレイしているからです。
専用サーバー はヘッドレスで実行されるサーバーがなります。つまり、専用サーバーのゲーム インスタンスで直接プレイするクライアントがないということです。すべてのプレイヤーは、リモート クライアントから接続します。ヘッドレス サーバーはビジュアルをレンダリングすることもなく、このヘッドレス サーバー上でユーザーがローカルにプレイすることもありません。
これには Listen サーバーと比較して次のようなメリットがあります。
- サイズを抑える
- ホスト クライアントが有利にならない
- ゲームプレイ ロジックとクライアントからの情報の管理に注力
Listen サーバーは、多くの場合、カジュアルなマルチプレイヤーおよび連携ゲーミングで利用できますが、専用サーバーは大規模なゲームや対戦ゲームに適しています。
このチュートリアルでは、専用サーバーを構築し、クックしてテストする方法を示します。
チュートリアル
このチュートリアルではベースとして Lyra Starter Game を使用して、専用サーバーとクライアントをセットアップします。Lyra にはそのまま使えるマルチプレイヤー機能が用意されていて、このチュートリアルのサンプル ゲームとして最適なものです。
このチュートリアルの手順を実行するには、プロジェクトが次の要件を満たしている必要があります。
- Unreal Engine のソース ビルドを使用する必要があります。詳細については、「Unreal Engine のソースコードをダウンロードする」を参照してください。
- クライアント サーバー型マルチプレイヤー ゲームプレイをサポートする C++ プロジェクトを使用する必要があります。
Lyra を設定する
Lyra 用に生成された Visual Studio プロジェクト ファイルがあることを確認します。さらに、必ず Unreal Engine のバージョンをソースビルドに切り替えます。この操作の手順は、「エンジン ソース ビルド用に Lyra をダウンロードする」ページにあります。これを実行してから、プロジェクトのソース ディレクトリに移動し、LyraStarterGame.uproject
を開いて、Unreal Editor で Lyra を開きます。
Lyra サンプルの専用サーバーとクライアントをビルドする前に、変更が必要な複数の項目があります。
- [Server Default Map (サーバーのデフォルト マップ)] を L_Expanse に設定します。これによりクライアントは Lyra のメインメニューではなく、直接マップにつながります。
- スポーンするボット数を 0 に変更します。これによりクライアントがサーバーに接続したとたんにボットがクライアントに攻撃を加えることはありません。
サーバーのデフォルト マップを設定する
- メニュー バーで、[Edit (編集)] > [Project Settings... (プロジェクト設定...)] に移動します。新しい [Project Settings (プロジェクト設定)] ウィンドウが開きます。
- 左側の目次から [Project (プロジェクト)] > [Maps & Modes (マップ&モード)] を見つけます。
- [Default Maps] > [Advanced (詳細設定)] > [Server Default Map (サーバーのデフォルトマップ)] を L_Expanse に変えます。
- [Project Settings] ウィンドウを閉じます。
Lyra で利用できるマップの詳細については、「Lyra サンプル ゲーム」のドキュメントを参照してください。
ボット数を変更する
- ボット数を変更するには、Lyra の アセット の 1 つを編集する必要があります。アセットを編集するには、コンテンツ ドロワー を開きます。
- ディレクトリを「Plugins」に切り替えます。
B_ShooterBotSpawner
ブループリントを見つけます。これはスポーンするボット数を変更するために編集が必要なブループリントです。B_ShooterBotSpawner
ブループリントを開きます。このブループリントを設定するための新しいウィンドウが開きます。- [Teams] セクションのフィールド [Num Bots to Create] を見つけます。
- デフォルトでは、この数値が 3 に設定され、Unreal Editor 内でゲームを開始したとき、2 対 2 の対戦型ゲームが開始されます。[Num Bots to Create] を 0 に設定します。これにより、ボットの動きに煩わされることなく、同じ専用サーバーに、クライアントが接続したことを確認できます。
- ウィンドウの左上に [Compile (コンパイル)] ボタンがあります。[Compile] をクリックして、ブループリントに対する変更を有効にします。
- ブループリント ウィンドウを閉じます。
最初のプロジェクト設定はこれで完了です。Unreal Editor を閉じます。
Lyra を使用してこのガイドを実行する場合は、ファイルパスの PROJECT_NAME
変数は Lyra サンプルの LyraStarterGame
です。
ビルド
サーバー
Lyra Starter Game プロジェクトに対する Development Server コンフィギュレーションをビルドする準備ができました。
- ファイル エクスプローラ でプロジェクトのルート ディレクトリに移動します。
- プロジェクトの「
*.uproject
」ファイルを右クリック し、[Generate Visual Studio project files... (Visual Studio プロジェクト ファイルの生成)] を選択します。 - Visual Studio (VS) で生成された
*.sln
Visual Studio ソリューション ファイルを開きます。 - プロジェクトに該当ファイルがない場合は、「
<PROJECT_DIRECTORY>/Source
」ディレクトリに「<PROJECT_NAME>Server.Target.cs
」を作成します。- サンプルとして「
LyraServer.Target.cs
」を参照してください。
- サンプルとして「
- [Solution Configuration] を [Development Server] に設定します。
- メニューバーから [Build (ビルド)] > [Build Solution (ソリューションのビルド)] を選択します。プロジェクトに対して専用サーバーがビルドされます。
- ビルドが正常に終了すると、新しいビルド ファイルが「
<PROJECT_DIRECTORY>/Binaries/Win64
」に生成され、そこに実行ファイル「<PROJECT_NAME>Server.exe
」もあります。- Lyra では、これらは「
LyraStarterGame/Binaries/Win64
」に配置され、実行ファイル「LyraServer.exe
」もあります。
- Lyra では、これらは「
クライアント
サーバーをビルドしたので、Lyra Starter Game に対して Development Client コンフィギュレーションをビルドできます。
- Visual Studio が開いているので、サーバーのビルド ステップの [Solution Configuration] を [Development Client] に変更します。
- プロジェクトに該当ファイルがない場合は、「
<PROJECT_DIRECTORY>/Source
」ディレクトリに「<PROJECT_NAME>Client.Target.cs
」を作成します。- サンプルとして「
LyraClient.Target.cs
」を参照してください。
- サンプルとして「
- メニューバーから [Build (ビルド)] > [Build Solution (ソリューションのビルド)] を選択します。プロジェクトに対してクライアント ゲームをビルドします。
- ビルドが正常に終了すると、新しいビルド ファイルが「
<PROJECT_DIRECTORY>/Binaries/Win64
」に生成され、そこに実行ファイル「<PROJECT_NAME>Client.exe
」もあります。- Lyra では、これらは「
LyraStarterGame/Binaries/Win64
」に配置され、実行ファイル「LyraClient.exe
」もあります。
- Lyra では、これらは「
クック
サーバー コンテンツ
専用サーバーとこのサーバーに接続するクライアントをビルドできました。VS からサーバーを実行しようとすると、シェーダーが見つからないというエラー メッセージが表示されます。これはコンテンツをクックしていないからです。サーバー コンテンツをクックするには、以下のとおり実行します。
- VS から、またはプロジェクトのディレクトリに移動し
UnrealEditor.exe
を実行して、Development Editor を開始します。 - メイン ツールバー から [Platforms (プラットフォーム)] > [Windows] > [Build Target] を [
Server] に、[Platforms (プラットフォーム)] > [Windows] > [Binary Configuration (バイナリコンフィギュレーション)] を [Development (開発)] に設定します。 - クック を [Platforms (プラットフォーム)] > [Windows] > [Content Management (コンテンツ管理)] から実行します。
- コンテンツをクックしていることを示すダイアログボックスが、左下隅に表示されます。クッキング処理をモニターするため、このダイアログボックスで [Show Output Log (アウトプットログを表示)] をクリックします。
- 処理が正常に終了すると、アウトプットログに「BUILD SUCCESSFUL」が表示されます。
- クック処理中に作成されたファイルを確認するには、「
<PROJECT_DIRECTORY>/Saved/Cooked/WindowsServer
」に移動します。 - コマンド プロンプトでプロジェクト ディレクトリに移動し、「
./Binaries/Win64/<PROJECT_NAME>Server.exe -log
」を実行することで、サーバーが正常に動作することをテストします。 - Logging ウィンドウを閉じて、専用サーバーをシャットダウンします。
クライアント コンテンツ
クライアント コンテンツをクックするには、以下のとおり実行します。
- Unreal Editor が動作していない場合、VS から、またはプロジェクト ディレクトリに移動し、
UnrealEditor.exe
を実行して、Development Editor を開始します。 - メイン ツールバー から [Platforms (プラットフォーム)] > [Windows] > [Build Target] を [
Client] に、[Platforms (プラットフォーム)] > [Windows] > [Binary Configuration (バイナリコンフィギュレーション)] を [Development (開発)] に設定します。 - クック を [Platforms (プラットフォーム)] > [Windows] > [Content Management (コンテンツ管理)] から実行します。
- コンテンツをクックしていることを示すダイアログボックスが、左下隅に表示されます。クッキング処理をモニターするため、このダイアログボックスで [Show Output Log (アウトプットログを表示)] をクリックします。
- 処理が正常に終了すると、アウトプットログに「BUILD SUCCESSFUL」が表示されます。
- クック処理中に作成されたファイルを確認するには、「
<PROJECT_DIRECTORY>/Saved/Cooked/WindowsClient
」に移動します。 - VS に移動し、[Solution Configuration] を [Development Client] に変更し、[Run without Debugging] を選択することで、クライアントを実行します。
- Experience Still Loading... というスプラッシュスクリーンが表示されます。クライアントは正常に動作していますが、想定されるのは、動作していない、専用サーバーに接続することです。Lyra クライアント ウィンドウを閉じます。
テスト
専用サーバーを起動する
ターミナル ウィンドウで、プロジェクトのルート ディレクトリから次のコマンドを実行します。
./Binaries/Win64/<PROJECT_NAME>Server.exe -log
専用サーバーが起動し、ロギング ウィンドウが開きます。
デフォルトでは、専用サーバーは localhost IP アドレス (127.0.0.1
) のポート 7777
でリッスンします。コマンド ライン引数 -port=<PORT_NUMBER>
を追加することで、専用サーバーのポートを変更できます。サーバーが使用しているポートを変更する場合、クライアントをサーバーに接続するときのポートも変更する必要があります。
クライアントを専用サーバーに接続する
ターミナル ウィンドウで、プロジェクトのルート ディレクトリから次のコマンドを実行します。
./Binaries/Win64/<PROJECT_NAME>Client.exe 127.0.0.1:7777 -WINDOWED -ResX=800 -ResY=450
これによりクライアント ゲームのインスタンスが開始されます。同じ専用サーバーに接続する 2 つのクライアントを表示するには、同じコマンドを繰り返して、別のクライアント インスタンスを起動します。
./Binaries/Win64/<PROJECT_NAME>Client.exe 127.0.0.1:7777 -WINDOWED -ResX=800 -ResY=450
ゲームに 2 人のプレイヤーが表示されます。また、サーバー ログをチェックすると、両方のプレイヤーがサーバーに接続していることを確認できます。
-WINDOWED
、-ResX=<HORIZONTAL_RESOLUTION>
、および -ResY=<VERTICAL_RESOLUTION>
コマンドライン引数を指定すると便利です。これにより両方のクライアント ウィンドウが同じ画面で表示され、テスト目的に適しています。ここで使用したコマンドライン引数の詳細については、「コマンドライン引数」ページを参照してください。
マルチプレイヤー エクスペリエンスを拡張する
このチュートリアルでは、ローカル マシンで専用サーバーをビルドし、クックして、テストする方法について説明します。次のステップは、機能するフロントエンドを提供し、ゲームのゲームプレイを拡張し、プレイヤーがインターネットを介して専用サーバーに接続するための手段を提供します。
Lyra サンプル
Unreal Engine で実際に動作するゲーム サンプルについては Lyra サンプルを参照してください。
ゲームプレイを拡張
ゲームのマルチプレイヤー ゲームプレイを拡張する方法の詳細については、「ネットワーク マルチプレイヤー クイック スタート ガイド」を参照してください。