Amazon Web Services ブログ

AWS Graviton EC2 インスタンスで動作するUnreal Engine 4 専用サーバーを作成する

Epic Games は Fortnite を含む世界最大級のゲームを複数持つインタラクティブエンターテインメントの大手企業です。彼らはUnreal Engineも開発しており、これは世界をリードするオープンで高度なリアルタイム3D制作ツールです。絶えず進化しており、世界をリードするゲームを強化するだけでなく、業界のクリエイターに最先端のコンテンツ、インタラクティブエクスペリエンス、没入型の仮想世界を提供する自由とコントロールを提供します。

あらゆる形態・規模のデベロッパーが素晴らしいゲームを構築、実行、成長させるのを支援する為、Epic Games と AWS は協力して Unreal Engine に対する AWS Graviton2 インスタンス のサポートを強化しました。AWS Graviton プロセッサは、64 ビットの Arm Neoverse コアを使用して AWS によってカスタムビルドされ、Amazon EC2 で実行されるクラウドワークロードに最良の料金とパフォーマンスを提供します。AWS Graviton2 のサポートにより、Unreal Engine のクリエイターは同等の現行世代の x86 ベースのインスタンスと比べて最大 40% 優れた料金パフォーマンスを活用できます。

AWS Graviton2 のフルサポートはUnreal Engine 4.27 でリリースされ、将来のリリースでさらに改善される予定です。Unreal Engine 4.27 のプレビューは Epic Games ランチャーと GitHub から利用できます。ARM64 サポートは AWS でゲームやアプリケーションを実行している開発者に利益をもたらす為、Unreal Engineの以前のバージョンにも統合されています。

ゲームが一夜にして大ヒットした場合、継続的な成功はプレイヤーの要求に応じてスケーリングできる信頼性の高いサーバーに依存します。柔軟性は不可欠であり、ゲームサーバーを自分で構築したり、既存のツールと統合したり、フルマネージドサービスに移行したりする場合でも、 AWS は最も幅広く最も深いクラウドベースのコンピューティングプラットフォームを提供します。

AWS EC2 Graviton2 インスタンスの導入により、Amazon EC2 で専用ゲームサーバーをホストするためのオプションがさらに増え、第 1 世代の AWS Graviton プロセッサーに比べてパフォーマンスと機能が飛躍的に向上しました。ARM64 との互換性のため、Unreal Engine 4 (UE4) では専用ゲームサーバーのコードを再コンパイルするのは簡単です。以下のステップバイステップガイドに従って、Unreal Engine および AWS Graviton2 インスタンスを使用して専用ゲームサーバーを作成する方法を学習します。

 

必要なもの

  • 専用 GPU を搭載した Windows 10 ワークステーション
  • Visual Studio

 

開発環境のセットアップ

このセクションでは、Unreal Engine 4 専用サーバーを Arm プラットフォーム用にコンパイルし、AWS Graviton2 インスタンスで実行できるような互換性を持たせる方法を説明します。以下のインストラクションのほとんどは、x86 および Arm プラットフォームから独立しています。このガイドでは、AWS Graviton2 インスタンス用のゲームを構築する前に、Windows 上でクリーンな作業環境を構築することに重点を置いています。

Unreal Engineのソースコードへのアクセスを取得する

Unreal Engine 専用ゲームサーバーをコンパイルするには、Unreal Engine をソースからビルドする必要があります。UE4 ソースコードにアクセスするには、ここで説明されている手順を完了してから、このガイドに戻ってください。

Visual Studio Community Editionのインストール

ソースからUnreal Engineをビルドするには、Visual Studio 2019 Community Editionをダウンロードすることをお勧めします。Visual Studio 2019 Community Editionはこちらから無料でダウンロードできます。ダウンロードが完了したら、インストールに進みます。

Unreal Engine エディタと Unreal Engine プロジェクトをビルドするには、いくつかのオプション機能をインストールする必要があります。Workload タブに移動し、 “Game development with C++” を選択し、右側で次のオプションを選択します。

  • C++ profiling tools
  • C++ AddressSanitizer
  • Windows10 SDK (10.0.18362.0)
  • Unreal Engine Installer

Visual Studio Community Edition installer

Individual components タブを選択し、“Compilers, build tools, and runtimes” まで下にスクロールして MSBuild を選択します。

Visual Studio Community Edition installer

これで Visual Studio 2019 をインストールする準備ができました。Install をクリックし、完了を待ちます。

Unreal Engineのソースコードをダウンロードする

GitHub にログインし、Unreal Engine の GitHub リポジトリに移動し、バージョン 4.26.2 以降をダウンロードします。4.27 の一部として公式サポートがリリースされる一方で、変更はすでに 4.26.2 以降のバージョンでマージされています。このガイドでは4.26.2を使用しています。

Unreal Engine GitHub Repository

クロスコンパイル ツールチェーンをインストールする

Unreal Engine が Windows 上で実行されているときに Linux ディストリビューション用のバイナリをコンパイルするには、クロスコンパイル ツールチェーンをインストールする必要があります。これを行うには、「Linux のクロスコンパイル」のドキュメントページに移動します。v17 ツールチェーンをダウンロードしてインストールします。

Cross-Compiling or Linux - Unreal Engine Documentation Page

Unreal Engineをソースからコンパイルする

Unreal Engineのソースコードの zip アーカイブを解凍します。解凍したフォルダを “C:\Users\Administrator\Documents\UnrealEngine” に置きます。

管理者として Windows PowerShell セッションを開きます。

Windows Powershell

C:\Users\Administrator\Documents\UnrealEngine\ に移動します。

Administrator: Windows PowerShell

Setup.bat を実行し、完了するまで待ちます。

Administrator: Windows PowerShell

GenerateProjectFiles.bat スクリプトを実行します。

Adminsitrator: Windows PowerShell

C:\Users\Administrator\Documents\UnrealEngineue4.sln というファイルがあるはずなので、Visual Studio 2019 で開きます。

Documents - Unreal Engine Folder

Visual Studio 2019 のインストールで追加のコンポーネントのインストールが推奨される場合、すぐにインストールしてください。インストールが完了したらソリューション構成を“Devolopment Editor”に、ソリューションプラットフォームを”Win64“に設定します。

Visual Studio 2019

右側カラムの Solution Explorer で、UE4 ビルドターゲットを右クリックし、 Build を選択します。

Visual Studio 2019 - Solution Explorer

Unreal Engine のビルドには少し時間がかかるので、お気に入りの飲み物を一杯飲み、ビルドが完了したら戻ってきてください。

Unreal Engineを開く

C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64 に移動して UE4Editor.exe を起動します。

Open Unreal Engine

Third Personゲームプロジェクトのセットアップ

Unreal Project Browser で、新しい Games プロジェクトを作成します。

Unreal Project Browser

Select Template“Third Person” を選択し、Next をクリックします。

Project Settings“C++ Project” が選択されていることを確認し、プロジェクトに GravitonServer という名前を付け、 Create Project を選択します。

これで、プロジェクトが Visual Studio で自動的に開かれるはずです。ただし、専用サーバーを構築するには、ファイルをいくつか変更してから Visual Studio プロジェクトファイルを再生成する必要があります。Visual Studio ウィンドウを閉じて、次の変更を加えます。

専用サーバービルドターゲットの作成

ゲームの専用サーバーをビルドするには、専用サーバービルドターゲットを作成する必要があります。これを行うには、エディタのターゲットファイルをコピーして、専用サーバーのターゲットファイルに変換します。

Windows エクスプローラーを開き、C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Source に移動します。

GravitonServerEditor.target.cs ファイルをコピーして、新しいファイルに GravitonServerServer.target.cs という名前を付けます。

Windows Explorer Target File

Windows Explorer Target File

GravitonServerServer.target.cs をVisual Studioで開きます。

Visual Studio

GravitonServerEditorTarget の両方のインスタンスを GravitonServerTarget に置き換えます。Type = TargetType.editorType = TargetType.server に変更します。最終的なファイルは、次の画像のようになります。

Visual Studio

ここで、 Unreal Engine プロジェクトファイルを再生成して Unreal Engine が新しいサーバービルドターゲットを認識できるようにします。これを行うには、“C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer”に移動し、GravitonServer.uproject を右クリックし、Generate Visual Studio project files をクリックします。

Windows Explorer

ファイルが生成されたら、“GravitonServer.sln”をダブルクリックして Visual Studio プロジェクトを開きます。プロジェクトがロードされたら、エディタの設定を変更して専用サーバービルドをセットアップする必要があります。

Solution Configuration ドロップダウンボックスで、 “Development Server” に切り替えます。

Visual Studio Solution Configuration dropdown

これで専用サーバープロジェクトを構築できます。右側の GravitonServer プロジェクト名を右クリックし、“Build”を選択するだけです。

Visual Studio GravitonServer project name

ゲームを微調整してプロジェクトをパッケージ化する前に、エディタのビルドターゲットを再コンパイルしてください。これを行うには、 “Solution Configuration” ドロップダウンを “Development Editor” に変更します。

Visual Studio Development Editor

次にプロジェクト名を右クリックして “Build” をもう 1 回クリックして、Development Editorターゲットをビルドします。

次にUnreal Engine エディタでプロジェクトを開き、このゲームを配信用にパッケージ化します。これを行うには、Windows エクスプローラーでGravitonServer.uproject ファイルをダブルクリックします。

GravitonServer.uproject

デフォルトのThird Personサンプルプロジェクトを使用しているため、正常にロードされると GravitonServer プロジェクトは以下の画像のようになります。

Unreal Engine Editor

スタートアップマップの追加

新しいマップをプロジェクトに追加します。これは、ユーザーがゲームをロードしたときに表示される内容になります。このチュートリアルをシンプルにするために、新しいマップは黒い画面になります。まず、 “Maps” フォルダをダブルクリックします。

Unreal Editor Map

右クリックしてNew Levelを選択し、新しいファイルに“EntryLevel”という名前を付けます。

さあ、新しいレベルを開きましょう。プロンプトが表示されたら、 “EntryLevel” をダブルクリックし、 Save Selected を選択します。

マップ設定を構成する

次にクライアントと専用サーバーがデフォルトでロードするマップを構成します。このチュートリアルでは、クライアントはデフォルトで EntryLevel をロードし、専用サーバーはデフォルトで ThirdPersonExampleMap をロードします。そのためには、 Edit → Project Settingsと進み、Project Settingsを開きます。

Unreal Editor

次に “Maps & Modes” を選択し、 Advanced Settings メニューを展開し、 “Global Default Server Game Mode”“GravitonServerGameMode” に変更します。

次に専用サーバーとゲームクライアントによってロードされるデフォルトのマップを変更します。 default map セクションを展開し、 “Game Default Map”“EntryLevel” に、 “Server Default Map”“ThirdPersonExampleMap” に変更します。

Unreal Editor default maps

次にゲームをビルドしてデプロイ用にパッケージ化する際のパッケージング設定を、マップをゲームと共にパッケージする様に変更します。これを行うには、左側のメニューの “Packaging” オプションをクリックし、ドロップダウン矢印をクリックして展開します。

Unreal Editor Packaging

次にマップをビルドパッケージに追加します。 “List of maps to include in a packaged build” まで下にスクロールし、 “+” ボタンをクリックすると、その下に新しい行が 2 つ表示されます。

ボックスの横にある 3 つのドットをクリックしてマップを追加すると、ファイルエクスプローラウィンドウが開きます。“C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Contents\ ThirdPersonCPP\ Maps” に移動し、 “ThirdPersonExampleMap.umap” ファイルを選択します。 “EntryLevel.umap” ファイルに対してこれを繰り返します。完了すると、プロジェクト設定画面は次の画像のようになります。

Unreal Editor build package

このチュートリアルではゲーム内コンソール機能を使用してゲームの専用サーバーに接続します。

注意: プロダクションゲームでは、これは通常、カスタムマッチメイキングロジックによって処理されますが、それはこのチュートリアルの範囲を超えています。

ゲーム内コンソールを使用して専用サーバーに接続するには、 Pachage Settings で “Project” セクションまで下にスクロールし、 “Build Configuration”“Development” に設定されていることを確認します。

Unreal Editor Project Section

これでゲームをビルドしてパッケージ化できます! 最初にゲームクライアントをビルドし、次に専用サーバーバイナリをビルドします。サーバーが正しく動作することを確認するには、まず Windows 用のゲームをビルドしてパッケージ化して localhost で実行し、クライアントが適切に接続できることを確認します。ゲームが動作していることが分かったら、AWS Graviton インスタンス用にビルドしてパッケージ化します。

ゲームと専用ゲームサーバーの構築とパッケージ化

ゲームをビルドしてパッケージ化する最初のステップは、正しいビルドターゲットが選択されていることを確認することです。最初にゲームをビルドします。正しいビルドターゲットが選択されていることを確認するには、 File → Package Project → Build Target の順に進み、 “GravitonServer” が選択されていることを確認します。

Unreal Editor Build Target

ゲームをビルドするには、 File → Package Project → Windows (64-bit) を選択します。Windows エクスプローラウィンドウが開き、ビルドおよびパッケージ化されたバイナリを保存する場所を選択できます。

私は“C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries” を選択しました。あなたも自分が保管したい場所に置いてください。場所が決まったら “Select Folder” をクリックすると、ビルドプロセスが開始されます。

Unreal Editor で “Show output log” を選択すると、ビルドプロセスをモニタリングできます。これには時間がかかるかもしれないので、今こそお気に入りの飲み物をもう一杯取りに行く時です。ゲームバイナリをビルドしてパッケージ化したら、専用サーバーバイナリをビルドしてパッケージ化できます。これを行う為、 File → Package Project → Build Target の順に進み、 “GravitonServerServer” を選択して、ビルドターゲットを変更します。

Unreal Editor

File → Package Project → Windows (64-bit) をもう一度選択します。ビルドおよびパッケージ化された 専用サーバーのバイナリを保存する場所を選択し、ビルドが完了するまで待ちます。ビルドが完了したら専用サーバーを起動し、クライアントを専用サーバーに接続します。

Windows で専用ゲームサーバーを実行する

専用サーバープロセスがすべて正常に動作していることを確認する為に、ロギングを有効にして専用サーバープロセスを開始します。Powershell を開き、専用サーバーバイナリを保存した場所にディレクトリを変更します。私は “C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsServer” を使いました。

Powershell

GravitonServerServer.exe -logと入力し、ロギングを有効にして専用サーバーを起動します。サーバーログを含む新しいウィンドウが開きサーバーがリッスンしているポートが表示されるはずです。私の場合は次のサーバーログに示されているように、ポート 7777 を使っています。

ローカルホスト上で動作する専用ゲームサーバーに接続する

それではゲームがローカルホストで実行されている専用サーバーに接続できることを確認しましょう。ゲームを起動するには Windows エクスプローラーを開き、 C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsNoEditor に移動し、 “GravitonServer.exe” をダブルクリックして開始します。

Unreal Editor でゲームが開き、前に作成した EntryLevel マップが黒い画面になります。ゲームが開いたら、キーボードの「`」キーを押してゲーム内コンソールを開きます。サーバーに接続するには、“Open “127.0.0.1:7777″” と入力して Enter を押します。

in-game console

ゲームがすぐに接続されない場合は、専用サーバープロセスがスリープ状態になっている可能性があります。PowerShell で実行中のサーバープロセスを停止して再起動し、接続を再試行してください。ゲームが接続されると、Unreal Editor にゲーム内のエクスペリエンスが表示されるはずです。

Unreal Editor in-game experience

AWS Graviton2 インスタンス用の専用ゲームサーバーの、ビルドとパッケージ化

ゲームと専用サーバーの両方が正しく機能していることを確認できたので、AWS Graviton2 を搭載した EC2 インスタンス用に専用サーバーを構築してパッケージ化できるようになりました。Unreal Engine エディタに戻り、 File → Package Project → Linux → Linux (AArch64) を選択します。

Windows エクスプローラウィンドウが開き、ビルドおよびパッケージ化されたバイナリを保存する場所を選択できます。私は“C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries” を選択しました。あなたも自分が保管したい場所に置いてください。 “Select Folder” をクリックするとビルド処理が開始されます。ビルドが完了すると、バイナリの保存を選択した場所に “LinuxaArch64Server” というフォルダが表示されます。

AWS Graviton2 搭載 EC2 インスタンスに簡単にコピーする為に、AWS Graviton2 EC2 インスタンスにコピーするフォルダ全体の zip アーカイブを作成します。

 

専用ゲームサーバーのセットアップ

AWS Graviton2 EC2 インスタンスを起動する

専用サーバーには、Amazon Linux 2 を実行している m6g.large EC2 インスタンスを使用します。m6g インスタンスのサイズは自由に使用できますが、m6g.large インスタンスは十分な大きさでなければなりません。AWS コンソールにアクセスして、あなたの開発インスタンスを起動します。Graviton2 インスタンスを起動するときは Arm と互換性のある AMI を指定する必要があります。

このインスタンスを起動するときに、セキュリティグループの設定で Windows 開発マシンが UDP ポート 7777 および TCP ポート 22 で専用サーバーと通信できることを確認してください。ゲームプレイトラフィックにはポート 7777、SSH にはポート 22 を使用します。

インスタンスが実行されたら、お好きなツールを使用して Windows から AWS Graviton2 インスタンスにバイナリをコピーします。

専用ゲームサーバーの起動スクリプトを実行する

専用サーバーのバイナリを含む zip アーカイブがインスタンスにコピーされると、セットアップにはさらにいくつかの手順をとります。まずアーカイブを解凍します。アーカイブを保存したディレクトリに移動し、 “unzip ./LinuxAArch64Server.zip” を実行します。

アーカイブが解凍されると、新しいディレクトリが表示されます。 cd linuxaArch64Server/ を実行して、新しく作成したディレクトリに移動します。新しいディレクトリは次の画像のようになります。

専用サーバーを実行するには、スタートアップシェルスクリプト GravitonServerServer-AArch64.sh に実行権限を追加します。これを行うには、 chmod +x GravitonServerServer-AArch64.sh を実行します。

これで /GravitonServerServer-AArch64.sh を実行してゲームサーバープロセスを開始できます。プロセスが開始されると次の画像の様になります。

AWS Graviton2 インスタンスで実行されている専用ゲームサーバーに接続する

ゲームサーバーが実行され接続を待っているので、ゲームを実行している Windows 開発マシンからゲームサーバーに接続します。以前と同じようにゲームを起動します。以前作成した EntryLevel マップである黒い画面が開きます。ゲームが開いたら、キーボードの「`」キーを押してゲーム内コンソールを開きます。ゲーム内コンソールが開いたら、インスタンスのパブリック IP アドレスに接続します。ゲームが接続されると、次の画像の様なものが表示されます。

これで、Windows と AWS Graviton2 EC2 インスタンスの両方でUnreal Engineのサンプルゲームを正常にビルド・コンパイルできました。AWS Graviton2 インスタンスで専用サーバーをホストすることで、同等の現世代の x86 ベースのインスタンスに比べて価格パフォーマンスが最大 40% 向上しました。AWS Graviton2 互換のゲームサーバーをコンパイルできるようになったので、ゲームサーバーを Graviton2 インスタンスでテストしましょう!

※最後に、テストを終えたインスタンスはコスト削減のため終了するのをお忘れなく。

 

翻訳はソリューションアーキテクトの長田が担当しました。原文はこちらです。