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

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

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

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

その他のリソース:

前提条件

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

前提条件
注記

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

  • 4.22

  • 4.23

  • 4.24

  • 4.25

  • 4.26

  • 4.27

  • 5.1.0

  • 5.1.1

  • 5.2

  • 5.3

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

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

注記

まだアクセスしていない場合は、「 での Unreal Engine ソースコードへのアクセス GitHub」の指示に従って、 GitHub アカウントを Epic 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 サーバー 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 エンジンの 3 人称テンプレートを試してください。このテンプレートの詳細については、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 DLL をゲームサーバービルドにパッケージ化します。 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 を参照してください。