Amazon Web Services ブログ

Unreal Engine 5 での専用サーバーを AWS Graviton EC2 インスタンス向けにコンパイルする方法

本記事は https://aws.amazon.com/jp/blogs/gametech/compiling-unreal-engine-5-dedicated-servers-for-aws-graviton-ec2-instances/ (2023 年 6 月 15 日公開) を翻訳した記事となります。

Epic Games (Epic) はインタラクティブエンターテイメントの大手企業であり、Unreal Engine (UE) の開発もしています。Unreal Engine は Fortnite をはじめとする世界有数のゲームを支える最もオープンで高度なリアルタイム 3D 制作ツールの 1 つであり、さまざまな業界のクリエイターによって最先端の体験を提供するために利用されています。

Epic Games と AWS は Unreal Engine 向けの AWS Graviton インスタンスのサポートを発表いたしました。この発表には Graviton2 プロセッサと比較して最大 25% 高いパフォーマンスで、最大 2 倍の浮動小数点パフォーマンス、および最先端の DDR5 メモリ テクノロジに基づくメモリアクセスを実現する最新世代の AWS Graviton3 に対する対応も含まれています。Graviton3 は同等のパフォーマンスを持つ EC2 インスタンスと比較して最大 60% エネルギーしか消費しないため、二酸化炭素排出量の削減も可能です。

一晩にしてゲームが口コミで広まって大ヒットしたとき、ビジネスが成功するかどうかは、プレイヤーの需要に応じてサーバーが柔軟に拡張できるかに懸かっています。ゲームサーバーを自分で構築したり、既存のツールと統合したり、Amazon GameLift のようなフルマネージドサービスに移行したりするような場合の全てにおいて、 AWS はクラウドベースのコンピューティングオプションを提供します。Amazon EC2 Graviton3 Instance の発表により、お客様は専用ゲームサーバーをホストするための新しいオプションが利用可能になりました。

Unreal Engine 5 では、専用のゲームサーバーコードを ARM64 互換になるように簡単に再コンパイルすることができます。 この記事では、初めての Unreal Engine 専用ゲームサーバーを AWS Graviton3 インスタンス上で稼働させる方法を紹介します。

前提条件

  • 専用 GPU のある Windows ワークステーション
  • Visual Studio 2022
  • Visual Studio 2022 Game Development with C++ Module Installed
  • All Visual Studio 2022 .NET Framework 4.6.x Components Installed

開発環境のセットアップ

このセクションでは Unreal Engine 5 専用サーバーを AWS Graviton3 インスタンスと互換性のある LinuxArm64 環境でコンパイルする方法をステップごとにご紹介します。

1. Unreal Engine のソースコードアクセス権の取得

Unreal Engine 専用ゲームサーバーのコンパイルのためには Unreal Engine をソースコードからビルドする必要があります。Unreal Engine 5 のソースコードへアクセスするために、こちらの手順を完了させた後に本ガイドに戻ります。

2. Unreal Engine のソースコードをダウンロード

GitHub にログインして、Unreal Engine の GitHub Repository を開き、バージョン 5.1.1 以降のバーションをダウンロードします。バージョン 4.27.2 より後の全てのバージョンで AWS Graviton 用の専用ゲームサーバーをサポートしていますが、本ガイドでは Unreal Engine 5 用の手順を紹介します。

Source code (zip) に加えて、Commit.gitdeps.xml もダウンロードしておいて下さい。

3. クロスコンパイル依存関係のインストール

Unreal Engine を Linux Distributions に向けて Windows 上でバイナリをコンパイルするために、クロスコンパイルツールチェインをインストールする必要があります。Unreal Engine ドキュメントのLinux ゲームの開発のページを開いてて、v20 toolchain をダウンロードしてインストールして下さい。

4. Unreal Engine のソースからのコンパイル

7zip をインストールして、Unreal Engine のソースコードの zip ファイルを解凍します。ここでは次のフォルダに解凍していきます

C:\Users\Administrator\Documents\UnrealEngine

また、解凍後のフォルダ内の Engine/Build/Commit.gitdeps.xml を先程ダウンロードした Commit.gitdeps.xml で置き換えておきます。

次に、 Windows Powershell を管理者モードを実行します。

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

Setup.bat を実行して完了するまでしばらく待ちます。

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

C:\Users\Administrator\Documents\UnrealEngineUE5.sln ファイルが新たに生成されていることを確認し、Visual Studio 2022 で開きます。

Visual Studio 2022 で追加コンポーネントのインストールを推奨された場合、それらをインストールしておきます。全てのインストールが終わったあとに、Solutions Configuration を Development Editor に設定して、Platform を Win64 に設定します。

トップメニューの Build メニューを開いて、Build Solution を実行します。

Unreal Engine のビルドには多少時間がかかるため、コーヒーを片手にしばらく休憩を取るとよいでしょう。

5. Unreal Engine の起動

C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64 をエクスプローラーで開き、UnrealEditor.exe を起動します。


Lyra サンプルゲームの初期設定

Epic 社から、クライアントとサーバーを含む全てのアセットやコードが含まれているマルチプレイヤー用のサンプルゲームが提供されています。このプロジェクトを利用することで、今回のデモのために追加のアセットやコードの開発をしなくて済むようになります。

1.Lyra サンプルゲームを Epic Game Store からダウンロードする

Epic Games は Unreal Engine 5 用の無料のデモゲームを Epic Games Store で提供しています。このプロジェクトは Lyra サンプルゲームと呼ばれており、サンプルゲームのダウンロードのために Epic Games Launcher のダウンロードとインストールを行う必要があります。Epic Games Launcher のインストールが完了後、左側のペインから Store の中にある Unreal Engine を選択します。

Samples のペインから Lyra Starter Game を選択します。

プロジェクトを作成するボタンを押して、Unreal Engine バージョン 5.1 を選びます。

2. Visual Studio ファイルの生成とプロジェクト設定

はじめに、 Lyra 用の Visual Studio プロジェクトファイルを生成します。この作業により後ほど専用ゲームサーバーのビルドや変更が可能になります。
前述の手順で Lyra Starter Game を保存したディレクトリを開きます。次に、LyraStarterGame.uproject を右クリックして、Generate Visual Studio project filesを選びます。

LyraStarterGame.uproject ファイルを Unreal Editor で開くことで Lyra を起動します。Lyra サンプルゲーム用の専用ゲームサーバーとクライアントをビルドする前にいくつかの設定を行う必要があります。まず、Server Default Map 設定を L_Expanse に設定します。次に、ボットのスポーン数を0にすることで、クライアントがサーバー接続時に即座にボットから攻撃されることを防ぎます。ボットの数を減らすことで、どのタイミングでクライアントがサーバーに接続できたり、切断されたかがわかりやすくなります。ボットの数は後ほどたくさん増やしていけます!

3. Server Default Map の設定

メニューバー内の Edit から Project Settings を選択します。

Maps & Modes を選択して、Default Maps
内の Server Default Map を L_Expanseに設定します。設定後は Project Settings の画面を閉じて構いません。

次にデフォルト設定となっているボットの数を変更します。エディタ画面の左下の Content Drawer を選択します。

プラグインディレクトリを開いて、B_ShooterBotSpawner を検索します。そこで表示される B_ShooterBotSpawner Blueprint クラスを選びます。

チーム内の Num Bots to Create を 0 に設定し、左上の Compile ボタンを押して設定を適用します。

これで、プロジェクトの設定を正しく終えることができました。Unreal Editor を閉じて、Visual Studio で作業を続けます。

4. ビルドクライアントとサーバーの設定

ファイルエクスプローラーから LyraStarterGame.sln ファイルを選択して、今回のゲームプロジェクトとして Visual Studio で開きます。

プロジェクトのソースディレクトリに LyraServer.Target.cs ファイルがあることを確認します。見つからなかった場合には新しく作る必要があります。見つかった場合、Development Server を Solution Configuration ツールバーから選択していきます。

メニューバーの Build 内から Build Solution を選択します。

ビルドが完了した後に、Solution Configuration ツールバーを  DevelopmentClient に変更して、先程と同じように Build Solution を実行します。

5. コンテンツのクック

ゲームをプレイする前に、コンテンツのクック処理をおこないます。この処理に向けて LyraStarterGame プロジェクトを Unreal Editor で再度開きます。Platforms のドロップダウンから Windows 内の Binary Configuration が Development になっていて、Build Target が LyraServer になっていることを確認してから Cook Contentを実行します。このクック処理により、サーバー用コンテンツを Windowsサーバー上で実行できるようになります。クック処理が終わると、プロジェクトの Binary ディレクトリにサーバーのバイナリが保存されます。ここでは、次のようなパスとなります。

Documents/Unreal Projects/LyraStarterGame/Binaries/Win64/LyraServer.exe

クライアント用コンテンツのクックも必要となります。Build Target を LyraClient として、再度  Cook Content を選択します。

5. Windows 上でのサーバーのテスト

Powershell で Lyra プロジェクトのソースディレクトリを開いて、次のコマンドを実行します。

.\Binaries\Win64\LyraServer.exe -log -port 7777

このコマンドで専用ゲームサーバーが 7777 ポートを使って起動します。2 つめのターミナルが起動されて専用ゲームサーバーのログファイルが表示されます。

元々の Powershell の画面で以下のコマンドを実行することで、ゲームインスタンスを起動しサーバーに接続します。サーバーのウィンドウを閉じたり、サーバープロセスを止めたりしないでください。

.\Binares\Win64\LyraClient.exe 127.0.0.1:7777 -WINDOWED -ResX=800 -ResY=450

次の画面のように、ゲームを起動して遊ぶことができます。

6. AWS Graviton インスタンス向け専用ゲームサーバーのビルドとパッケージング

これでゲームと専用サーバーが正常に動くことを確認できたので、AWS Graviton EC2 インスタンス向けに専用ゲームサーバーのビルドとパッケージング処理を行います。Unreal Engine エディタを開いて、Platforms のドロップダウンから LinuxArm64 を選択します。Binary Configuration が Development になっており、Build Target が LyraServer になっていることを確認したうえで、Cook Content を実行します。

ここで、異なるホストマシンやオペレーティングシステムでサーバーを実行するために、パッケージング処理を行っています。Platforms のドロップダウンを再度選択して、LinuxArm64 内の Package Content を実行します。ポップアップされたファイルエクスプローラーの画面で Binaries ディレクトリを選択します。この処理により、プロジェクトの Binaries フォルダ内に LinuxArm64Server が作られます。

サーバーのバイナリを AWS Graviton EC2 インスタンスにコピーするために、フォルダ全体を zip ファイルに圧縮します。


専用ゲームサーバーの設定

1. AWS Graviton EC2 インスタンスの起動

専用ゲームサーバーのために今回は c7g.xlarge EC2 インスタンスで Amazon Linux 2023 を起動します。ここでは任意の AWS Graviton インスタンスを選ぶことができますが、今回はデモのために c7g.xlarge を選んでいます。Amazon EC2 Console を開いて、開発用のインスタンスを起動します。Graviton2 インスタンスを起動するためには AMI が ARM と互換性があるものを指定します。

Linux ベースの EC2 インスタンスの起動に困った場合は、Linux 用 EC2 ユーザーガイドを参考にすることができます。インスタンス起動時に、セキュリティグループの設定を確認して手元の Windows 開発環境から専用ゲームサーバーに対して UDP 7777 番と TCP 22 番のポートが疎通していることを確認して下さい。7777 番ポートはゲーム用の通信で利用し、22 番ポートは SSH のために使われます。

インスタンスが起動した後に、手元の Windows 開発環境の ZIP ファイルを AWS Graviton c7g.xlarge インスタンスにお好きな方法でコピーします。

2. 専用ゲームサーバーの起動スクリプトの実行

ZIP 化された専用ゲームサーバーのバイナリを Graviton EC2 インスタンスにコピーしたあと、幾つかのステップを踏んでセットアップを続行します。まず、インスタンスに接続して ZIP ファイルを解凍します。ファイルを保存したディレクトリに移動して、unzip ./LinuxAArch64Server.zip のコマンドを実行します。

ZIP ファイルが解凍されると新しいディレクトリが利用可能になります。

新しく作られたディレクトリに cd LinuxArm64Server/ のコマンドで移動すると、次のようなディレクトリ構成になっています。

専用ゲームサーバーを実行するために、実行権限を LyraServer-Arm64.sh という起動用シェルスクリプトに付与します。次のコマンドを実行して下さい。

chmod +x LyraServer-Arm64.sh

これで、./LyraServer-Arm64.sh というシェルスクリプトを実行するとゲームプロセスを開始できるようになりました。プロセスの開始後は次のような画面が表示されます。

3. AWS Graviton インスタンスで実行される専用ゲームサーバーへの接続

これでゲームサーバーが起動して、新しいコネクションを受け付けられるようになりました。ゲームを遊ぶために、手元にある Windows 開発環境からサーバーに接続してみます。以前のローカルサーバーへの接続と似た形でゲームに接続していきますが、IP アドレスの部分をあなたが起動した AWS Graviton サーバーのものに変更する必要があります。

.\Binares\Win64\LyraClient.exe 10.2.23.25:7777

ゲームが即座に開始しなかった場合、専用ゲームサーバーのプロセスがスリープ状態になっている可能性があります。その場合はサーバーのプロセスを再起動することで簡単につなぎ直すことが可能です。ゲームがサーバーと通信できるようになると、次のような画面が表示されます。

まとめ

こうしてサンプルゲームを起動して動かすことができました。遊び終わったあとはリソースを削除しておきます。このチュートリアルで作成した全てのリソースを削除されているかを確認し、不要なリソースへの課金を防いでおきましょう。

Project Lyra のサンプルゲームを Windows と AWS Graviton インスタンスの両方でビルドし、コンパイルを行いました。専用ゲームサーバーを AWS Graviton インスタンスで起動することで、現行世代の x86 ベースのサーバーと比較して最大 40% のコストパフォーマンスを享受できます。このチュートリアルで AWS Graviton 互換のゲームサーバーをコンパイルする方法を学んだので、ぜひあなたの作ったゲームも AWS Graviton インスタンスで動かしてみましょう!