Amazon GameLift を Unreal Engine プロジェクトに統合する - Amazon GameLift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon GameLift を Unreal Engine プロジェクトに統合する

このトピックでは、Unreal Engine 用の Amazon GameLift C++ サーバー SDK プラグインをセットアップし、ゲームプロジェクトに統合する方法について説明します。

その他のリソース:

前提条件

続行する前に、以下の前提条件を必ず確認してください。

前提条件
  • Unreal Engine を実行できるコンピューター。Unreal Engine の要件の詳細については、Unreal Engine の「ハードウェアとソフトウェアの仕様」ドキュメントを参照してください。

  • Microsoft Visual Studio 2019 バージョン。

  • CMake バージョン 3.1 以降

  • Python バージョン 3.6 以降。

  • PATH 上で使用可能な Git クライアント。

  • Epic のゲームアカウント。Unreal Engine の公式ウェブサイトでアカウントをサインナップしてください。

  • Unreal Engine GitHub アカウントに関連付けられたアカウント。詳細については、Unreal Engine ウェブサイトの「Accessing Unreal Engine source code on GitHub 」を参照してください。

注記

Amazon GameLift は現在、Unreal Engine の次のバージョンをサポートしています。

  • 4.22

  • 4.23

  • 4.24

  • 4.25

  • 4.26

  • 4.27

  • 5.1.0

  • 5.1.1

Unreal Engine をソースから構築する

Epic ランチャーからダウンロードした Unreal Engine エディタの標準バージョンでは、Unreal クライアントアプリケーションのビルドのみを使用できます。Unreal サーバーアプリケーションを構築するには、Unreal Engine Github リポジトリを使用して、ソースから Unreal Engine をダウンロードして構築する必要があります。詳細については、Unreal Engine ドキュメンテーションのウェブサイトの「ソースからの Unreal Engine の構築」チュートリアルを参照してください。

注記

まだ行っていない場合は、「Accessing Unreal Engine source code on GitHub」の手順に従って、 GitHub アカウントを Games アカウントにリンクします。

Unreal Engine ソースを開発環境にクローンするには
  1. Unreal Engine ソースをお好きなブランチの開発環境にクローンます。

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. ゲームの開発に使用しているバージョンのタグを確認してください。例えば、次の例では Unreal Engine バージョン 5.1.1 をチェックします。

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. ローカルリポジトリのルートフォルダに移動します。ルートフォルダに移動したら、Setup.bat ファイルを実行します。

  4. ルートフォルダで、GenerateProjectFiles.bat ファイルも実行します。

  5. 前のステップのファイルを実行すると、Unreal Engine ソリューションファイル、UE5.sln が作成されます。Visual Studio を開き、Visual Studio エディタで UE5.sln ファイルを開きます。

  6. Visual Studio で [表示] メニューを開き、[ソリューションエクスプローラー] オプションを選択します。Unreal プロジェクトノードのコンテキストメニューが開きます。[ソリューションエクスプローラー] ウィンドウで UE5.sln ファイル (単に UE5 としてリストされる場合があります) を右クリックし、[構築] を選択して Development Editor Win64 ターゲットで Unreal プロジェクトを構築します。

    注記

    ビルドが完了するまで最大 1 時間かかることがあります。

ビルドが完了すると、Unreal Development Editor を開いてプロジェクトを作成またはインポートすることができます。

Unreal プロジェクトをプラグイン用に設定します。

Unreal Engine 用 Amazon GameLift Server SDK プラグインをゲームサーバープロジェクト用に準備するには、次の手順に従います。

プラグイン用にプロジェクトを設定するには
  1. Visual Studio を開いた状態で、[ソリューションエクスプローラー] ペインに移動し、UE5 ファイルを選択して Unreal プロジェクトのコンテキストメニューを開きます。コンテキストメニューで、[スタートアッププロジェクトとして設定] オプションを選択します。

  2. Visual Studio ウィンドウの上部にある [デバッグを開始] (緑色の矢印) を選択します。

    このアクションは Unreal Editor の新しいソースビルドインスタンスを起動します。Unreal Editor の使用に関する詳細は、Unreal Engine ドキュメントのウェブサイトにある「Unreal Editor インターフェイス」を参照してください。

  3. Unreal Editor は Unreal プロジェクトとゲームプロジェクトを含む別の Visual Studio ウィンドウを開くので、開いた Visual Studio ウィンドウを閉じます。

  4. Unreal Editor で、以下のいずれかを実行します。

    • Amazon と統合する既存の Unreal プロジェクトを選択します GameLift。

    • 新しい プロジェクトを作成します。Unreal 用 Amazon GameLift プラグインを試すには、Unreal エンジンの Third Person テンプレートを試してください。このテンプレートの詳細については、Unreal Engine ドキュメンとのウェブサイトにある「Third Person テンプレート」を参照してください。

      または、以下の設定で新しいプロジェクトを設定します。

      • C++

      • スターターコンテンツを使用

      • Desktop

      • プロジェクト名 このトピックの例では、プロジェクトに GameLiftUnrealApp という名前を付けました。

  5. Visual Studio の [ソリューションエクスプローラー] で、Unreal プロジェクトの場所に移動します。Unreal Source フォルダーで、Your-application-name.Target.cs という名前のファイルを検索します。

    例: GameLiftUnrealApp.Target.cs

  6. このファイルのコピーを作成し、Your-application-nameServer.Target.cs という名前を付けます。

  7. 新しいファイルを開き、以下の変更を加えます。

    • classconstructor をファイル名と一致するように変更します。

    • TypeTargetType.Game から TargetType.Server に変更します。

    • 最終的なファイルは、以下の例のようになります。

      public class GameLiftUnrealAppServerTarget : TargetRules { public GameLiftUnrealAppServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; ExtraModuleNames.Add("GameLiftUnrealApp"); } }

これで、プロジェクトは Amazon GameLift サーバー SDK プラグインを受け入れるように設定されました。

次のタスクは、Unreal 用 C++ サーバー SDK ライブラリを構築して、プロジェクトにインポートできるようにすることです。

Unreal 用 C++ サーバー SDK ライブラリを構築するには
  1. Unreal 用の Amazon GameLift C++ サーバー SDK プラグインをダウンロードします。

    注記

    SDK をデフォルトのダウンロードディレクトリに置くと、パスが 260 文字の制限を超えるため、ビルドが失敗する可能性があります。例:C:\Users\Administrator\Downloads\GameLift-SDK-Release-06_15_2023\GameLift-Cpp-ServerSDK-5.0.4

    C:\GameLift-Cpp-ServerSDK-5.0.4 など、SDK を別のディレクトリに移動することをおすすめします。

  2. OpenSSL をダウンロードし、インストールします。OpenSSL のダウンロードについて詳しくは、Github の「OpenSSL のビルドとインストール」ドキュメントをご覧ください。

    詳細については、OpenSSL の「Windows プラットフォームに関する注意事項」ドキュメントを参照してください。

    注記

    Amazon GameLift サーバー SDK の構築に使用する OpenSSL のバージョンは、Unreal がゲームサーバーをパッケージ化するために使用する OpenSSL のバージョンと一致する必要があります。バージョン情報は、Unreal インストールディレクトリ にあります...Engine\Source\ThirdParty\OpenSSL

  3. ライブラリをダウンロードしたら、Unreal Engine 用 C++ サーバー SDK ライブラリを構築します。

    ダウンロードした SDK の GameLift-Cpp-ServerSDK-<version> ディレクトリで、-DBUILD_FOR_UNREAL=1 パラメータを指定してコンパイルし、サーバー SDK を構築します。次の例は、cmake を使用してコンパイルする方法を示しています。

    ターミナルで以下のコマンドを実行します。

    mkdir cmake-build cmake.exe -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -S . -B ./cmake-build -DBUILD_FOR_UNREAL=1 -A x64 cmake.exe --build ./cmake-build --target ALL_BUILD --config Release

    Windows ビルドでは、out\gamelift-server-sdk\Release フォルダに次のバイナリファイルが作成されます。

    • cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.dll

    • cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.lib

    2 つのライブラリファイルを Amazon GameLift Unreal Engine プラグインパッケージの ThirdParty\GameLiftServerSDK\Win64フォルダにコピーします。

Amazon GameLift プラグインをサンプルプロジェクトにインポートするには、次の手順に従います。

Amazon GameLift プラグインをインポートする
  1. 前の手順でプラグインから抽出したGameLiftServerSDKフォルダを見つけます。

  2. ゲームプロジェクトのルートフォルダPluginsで を見つけます。(フォルダが存在しない場合は、そこに作成します)。

  3. GameLiftServerSDK フォルダを にコピーしますPlugins

    これにより、Unreal プロジェクトがプラグインを表示できるようになります。

  4. Amazon GameLift サーバー SDK プラグインをゲームの .uproject ファイルに追加します。

    この例では、アプリは GameLiftUnrealApp と呼ばれるため、ファイルは GameLiftUnrealApp.uproject になります。

  5. .uproject ファイルを編集してプラグインをゲームプロジェクトに追加します。

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  6. ゲームの がプラグイン ModuleRules に依存していることを確認してください。.Build.cs ファイルを開き、Amazon GameLiftServerSDK の依存関係を追加します。このファイルは Your-application-name/Source//Your-application-name/ の下にあります。

    例えば、チュートリアルのファイルパスは ../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs です。

  7. PublicDependencyModuleNames のリストの最後に "GameLiftServerSDK" を追加します。

    using UnrealBuildTool; using System.Collections.Generic; public class GameLiftUnrealApp : ModuleRules { public GameLiftUnrealApp(TargetInfo Target) { PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }); bEnableExceptions = true; } }

これで、プラグインはアプリケーションで動作するようになります。次のセクションに進み、Amazon の GameLift 機能をゲームに統合します。

Unreal プロジェクトに Amazon GameLift サーバーコードを追加する

Unreal Engine 環境を設定してセットアップし、ゲームサーバーを Amazon と統合できるようになりました GameLift。このトピックで説明するコードは、Amazon GameLift サービスに必要な呼び出しを行います。また、Amazon GameLift サービスからのリクエストに応答する一連のコールバック関数も実装されています。各関数とコードの機能について詳しくは、「サーバープロセスの初期化」を参照してください。このコードで使用されている SDK アクションとデータ型についての詳細は、「Unreal Engine 用 Amazon GameLift サーバー SDK リファレンス」を参照してください。

Amazon でゲームサーバーを初期化するには GameLift、次の手順を使用します。

注記

次のセクションで提供される Amazon GameLift固有のコードは、WITH_GAMELIFTプリプロセッサフラグの使用によって異なります。このフラグは、以下の両方の条件が満たされる場合にのみ適用されます。

  • Target.Type == TargetRules.TargetType.Server

  • プラグインは Amazon GameLift サーバー SDK バイナリを検出しました。

これにより、Unreal Server ビルドのみが Amazon GameLiftのバックエンド API を呼び出すことができます。また、ゲームが生成する可能性のあるさまざまな Unreal ターゲットすべてに対して正しく実行されるコードを記述できます。

ゲームサーバーを Amazon と統合する GameLift
  1. Visual Studio で、アプリケーションの .sln ファイルを開きます。この例では、GameLiftUnrealApp.sln ファイルはルートフォルダーにあります。

  2. ソリューションを開いた状態で、アプリケーションの Your-application-nameGameMode.h ファイルを見つけます。例えば、GameLiftUnrealAppGameMode.h などです。

  3. ヘッダーファイルを次のサンプルコードに合わせて変更します。必ずGameLiftUnrealApp「」を独自のアプリケーション名に置き換えてください。

    #pragma once #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "GameLiftServerSDK.h" #include "GameLiftUnrealAppGameMode.generated.h" DECLARE_LOG_CATEGORY_EXTERN(GameServerLog, Log, All); UCLASS(minimalapi) class AGameLiftUnrealAppGameMode : public AGameModeBase { GENERATED_BODY() public: AGameLiftUnrealAppGameMode(); protected: virtual void BeginPlay() override; private: // Process Parameters needs to remain in scope for the lifetime of the app FProcessParameters m_params; void InitGameLift(); };
  4. 関連するソースファイルの Your-application-nameGameMode.cpp を開きます。この例では: GameLiftUnrealAppGameMode.cpp ですが、次のサンプルコードに合うようにコードを変更してください。必ずGameLiftUnrealApp「」を独自のアプリケーション名に置き換えてください。

    このサンプルでは、「Amazon をゲームサーバーに追加する」で説明されているように GameLift、Amazon と の統合に必要なすべての要素を追加する方法を示します。 GameLift これには、以下が含まれます。

    • Amazon GameLift API クライアントの初期化。

    • コールバック関数を実装して、、OnStartGameSessionOnProcessTerminateなどの Amazon GameLift サービスからのリクエストに応答しますonHealthCheck

    • 指定されたポートで ProcessReady() を呼び出して、ゲームセッションをホストする準備ができた GameLiftservice ときに Amazon に通知します。

    #include "GameLiftUnrealAppGameMode.h" #include "GameLiftUnrealAppCharacter.h" #include "UObject/ConstructorHelpers.h" DEFINE_LOG_CATEGORY(GameServerLog); AGameLiftUnrealAppGameMode::AGameLiftUnrealAppGameMode() { // set default pawn class to our Blueprinted character static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter")); if (PlayerPawnBPClass.Class != NULL) { DefaultPawnClass = PlayerPawnBPClass.Class; } } void AGameLiftUnrealAppGameMode::BeginPlay() { #if WITH_GAMELIFT InitGameLift(); #endif } void AGameLiftUnrealAppGameMode::InitGameLift() { UE_LOG(GameServerLog, Log, TEXT("Initializing the GameLift Server")); //Getting the module first. FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK")); //Define the server parameters for a GameLift Anywhere fleet. These are not needed for a GameLift managed EC2 fleet. FServerParameters serverParameters; //AuthToken returned from the "aws gamelift get-compute-auth-token" API. Note this will expire and require a new call to the API after 15 minutes. if (FParse::Value(FCommandLine::Get(), TEXT("-authtoken="), serverParameters.m_authToken)) { UE_LOG(GameServerLog, Log, TEXT("AUTH_TOKEN: %s"), *serverParameters.m_authToken) } //The Host/compute-name of the GameLift Anywhere instance. if (FParse::Value(FCommandLine::Get(), TEXT("-hostid="), serverParameters.m_hostId)) { UE_LOG(GameServerLog, Log, TEXT("HOST_ID: %s"), *serverParameters.m_hostId) } //The Anywhere Fleet ID. if (FParse::Value(FCommandLine::Get(), TEXT("-fleetid="), serverParameters.m_fleetId)) { UE_LOG(GameServerLog, Log, TEXT("FLEET_ID: %s"), *serverParameters.m_fleetId) } //The WebSocket URL (GameLiftServiceSdkEndpoint). if (FParse::Value(FCommandLine::Get(), TEXT("-websocketurl="), serverParameters.m_webSocketUrl)) { UE_LOG(GameServerLog, Log, TEXT("WEBSOCKET_URL: %s"), *serverParameters.m_webSocketUrl) } //The PID of the running process serverParameters.m_processId = FString::Printf(TEXT("%d"), GetCurrentProcessId()); UE_LOG(GameServerLog, Log, TEXT("PID: %s"), *serverParameters.m_processId); //InitSDK establishes a local connection with GameLift's agent to enable further communication. //Use InitSDK(serverParameters) for a GameLift Anywhere fleet. //Use InitSDK() for a GameLift managed EC2 fleet. gameLiftSdkModule->InitSDK(serverParameters); //Implement callback function onStartGameSession //GameLift sends a game session activation request to the game server //and passes a game session object with game properties and other settings. //Here is where a game server takes action based on the game session object. //When the game server is ready to receive incoming player connections, //it invokes the server SDK call ActivateGameSession(). auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession) { FString gameSessionId = FString(gameSession.GetGameSessionId()); UE_LOG(GameServerLog, Log, TEXT("GameSession Initializing: %s"), *gameSessionId); gameLiftSdkModule->ActivateGameSession(); }; m_params.OnStartGameSession.BindLambda(onGameSession); //Implement callback function OnProcessTerminate //GameLift invokes this callback before shutting down the instance hosting this game server. //It gives the game server a chance to save its state, communicate with services, etc., //and initiate shut down. When the game server is ready to shut down, it invokes the //server SDK call ProcessEnding() to tell GameLift it is shutting down. auto onProcessTerminate = [=]() { UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating")); gameLiftSdkModule->ProcessEnding(); }; m_params.OnTerminate.BindLambda(onProcessTerminate); //Implement callback function OnHealthCheck //GameLift invokes this callback approximately every 60 seconds. //A game server might want to check the health of dependencies, etc. //Then it returns health status true if healthy, false otherwise. //The game server must respond within 60 seconds, or GameLift records 'false'. //In this example, the game server always reports healthy. auto onHealthCheck = []() { UE_LOG(GameServerLog, Log, TEXT("Performing Health Check")); return true; }; m_params.OnHealthCheck.BindLambda(onHealthCheck); //The game server gets ready to report that it is ready to host game sessions //and that it will listen on port 7777 for incoming player connections. m_params.port = 7777; //Here, the game server tells GameLift where to find game session log files. //At the end of a game session, GameLift uploads everything in the specified //location and stores it in the cloud for access later. TArray<FString> logfiles; logfiles.Add(TEXT("GameLift426Test/Saved/Logs/GameLift426Test.log")); m_params.logParameters = logfiles; //The game server calls ProcessReady() to tell GameLift it's ready to host game sessions. UE_LOG(GameServerLog, Log, TEXT("Calling Process Ready")); gameLiftSdkModule->ProcessReady(m_params); }
  5. 開発エディター開発サーバーの両方のターゲットタイプのゲームプロジェクトを構築します。

    注記

    ソリューションを再構築する必要はありません。代わりに、アプリ名と一致する Games フォルダの下にプロジェクトだけを構築します。そうしないと、Visual Studio は、UE5 プロジェクト全体を再構築します。これには、最大で 1 時間かかる場合があります。

  6. 両方のビルドが完了したら、Visual Studio を閉じてプロジェクトの .uproject ファイル Unreal Editor で開きます。

  7. Unreal Editor で、ゲームのサーバービルドをパッケージ化します。ターゲットを選択するには、「プラットフォーム」、「Windows」に移動し、「Y our-application-nameServer」を選択します。

  8. サーバーアプリケーションの構築プロセスを開始するには、[プラットフォーム][Windows] に移動し、[パッケージプロジェクト] を選択します。ビルドが完了すると、実行ファイルが作成される必要があります。この例の場合、ファイル名は GameLiftUnrealAppServer.exe です。

  9. Unreal Editor でサーバーアプリケーションをビルドすると、2 つの実行ファイルが生成されます。1 つはゲームビルドフォルダのルートにあり、実際のサーバー実行ファイルのラッパーとして機能します。

    サーバービルドで Amazon GameLift フリートを作成する場合は、実際のサーバー実行可能ファイルをランタイム設定の起動パスとして渡すことをお勧めします。例えば、ゲームビルドフォルダには、ルートに GameLiftFPS.exe ファイルがあり、別のファイルが \GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe にある場合があります。フリートを作成するときは、ランタイム設定の起動パスとして C:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe を使用することをおすすめします。

  10. ゲームサーバーがゲームクライアントと通信できるように、Amazon GameLift フリートで必要な UDP ポートを必ず開いてください。デフォルトでは、Unreal Engine は 7777 ポートを使用します。詳細については、「Amazon GameLift サービス API リファレンスガイドUpdateFleetPortSettings」の「」を参照してください。

  11. ゲームビルド用の install.bat ファイルを作成します。このインストールスクリプトは、ゲームビルドが Amazon GameLift フリートにデプロイされるたびに実行されます。サンプル install.bat ファイルは次のとおりです。

    VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q

    Unreal Engine の一部のバージョンでは、 install.batは である必要があります。

    VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
    注記

    <>PrereqSetup_x64.exe ファイルへのファイルパスは Engine\Extras\Redist\en-us です。

  12. これで、ゲームビルドをパッケージ化して Amazon にアップロードできます GameLift。

    ゲームビルドでパッケージ化する OpenSSL のバージョンは、ゲームサーバーの構築時にゲームエンジンが使用したバージョンと一致する必要があります。ゲームサーバーのビルドには、必ず正しい OpenSSL バージョンをパッケージ化してください。Windows OS の場合、OpenSSL 形式は .dll です。

    注記

    OpenSSL DLLs をゲームサーバービルドにパッケージ化します。ゲームサーバーの構築時に使用したのと同じバージョンの OpenSSL を必ずパッケージ化してください。

    • libssl-1_1-x64.dll

      libcrypto-1_1-x64.dll

    依存関係をゲームサーバー実行可能ファイルとともに zip ファイルのルートにパッケージ化します。例えば、openssl-lib dll は .exe ファイルと同じディレクトリにある必要があります。

次のステップ

Unreal Engine 環境を設定してセットアップし、Amazon GameLift をゲームに統合できるようになりました。

Amazon GameLift をゲームに追加する方法の詳細については、以下を参照してください。

ゲームのテストに関する手順については、Amazon GameLift Anywhere フリートを使用して統合をテストする を参照してください。