アマゾンを統合GameLiftアンリアルエンジンプロジェクトに - Amazon GameLift

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

アマゾンを統合GameLiftアンリアルエンジンプロジェクトに

このトピックでは、の設定方法を説明しますアマゾンGameLiftアンリアルエンジン用 C++ サーバー SDK プラグインゲームプロジェクトに組み込んでください。

その他のリソース:

前提条件

先に進む前に、以下の前提条件を確認してください。

前提条件
  • アンリアルエンジンを実行できるコンピューター。アンリアルエンジンの要件について詳しくは、アンリアルエンジンの要件をご覧くださいハードウェアとソフトウェアの仕様ドキュメンテーション。

  • マイクロソフトビジュアルスタジオ 2019 またはそれ以降のバージョン。

  • CMake バージョン 3.1 以降が必要です。

  • Python バージョン 3.6 以降。

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

  • エピックゲームズのアカウント。公式でアカウントにサインアップアンリアル・エンジンウェブサイト。

  • あるGitHubUnreal Engine アカウントに関連付けられたアカウント。詳細については、以下を参照してください。でアンリアルエンジンのソースコードにアクセスするGitHubアンリアルエンジンのウェブサイトにあります。

注記

アマゾンGameLift現在、以下のバージョンの Unreal Engine をサポートしています。

  • 4.22

  • 4.23

  • 4.24

  • 4.25

  • 4.26

  • 4.27

  • 5.1.0

  • 5.1.1

アンリアルエンジンをソースからビルド

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

注記

まだ行っていない場合は、次の指示に従ってくださいでアンリアルエンジンのソースコードにアクセスするGitHubリンクするにはGitHubEpic 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 エディタでUE5.slnファイル。

  6. ビジュアルスタジオで、[ビュー]メニューと選択ソリューションエクスプローラーオプション。これにより、Unreal プロジェクトノードのコンテキストメニューが開きます。にソリューションエクスプローラーウィンドウを右クリックUE5.slnファイル (単体でも表示できます)UE5) を選択し、ビルド開発エディターの Win64 ターゲットで Unreal プロジェクトをビルドします。

    注記

    ビルドが完了するまでに 1 時間以上かかる場合があります。

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

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

Amazonを入手するには、以下の手順に従ってくださいGameLiftゲームサーバープロジェクトに対応した Unreal Engine 用サーバー SDK プラグイン

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

  2. Visual Studio ウィンドウの上部にあるデバッグを開始する(緑の矢印)

    このアクションにより、ソースビルドの Unreal Editor の新しいインスタンスが起動します。Unreal Editor の使用方法の詳細については、以下を参照してください。アンリアルエディターインターフェイスアンリアルエンジンのドキュメンテーションウェブサイトにあります。

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

  4. Unreal エディタで、次のいずれかを実行します。

    • Amazon と統合したい既存の Unreal プロジェクトを選択してくださいGameLift。

    • 新しいプロジェクトを作成します。アマゾンを試してみるにはGameLiftアンリアル用のプラグイン、アンリアルエンジンを使用してみてくださいサードパーソンテンプレート。このテンプレートの詳細については、以下を参照してください。サードパーソンテンプレートアンリアルエンジンのドキュメンテーションウェブサイトにあります。

      または、次の設定で新しいプロジェクトを構成してください。

      • C++

      • スターターコンテンツ付き

      • Desktop

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

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

    例: GameLiftUnrealApp.Target.cs

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

  7. 新しいファイルを開き、次の変更を行います。

    • を変更classそしてconstructorファイル名と一致するようにしてください。

    • を変更TypeからTargetType.GameTargetType.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 ライブラリをビルドして、プロジェクトにインポートできるようにすることです。

アンリアル用の C++ サーバー SDK ライブラリをビルドするには
  1. のダウンロードアマゾンGameLiftアンリアル用 C++ サーバー SDK プラグイン

    注記

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

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

  2. OpenSSL をダウンロードしてインストールします。OpenSSL のダウンロードに関する詳細については、Github を参照してください。OpenSSL のビルドとインストールドキュメンテーション。

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

    注記

    ジ・アマゾンGameLiftEC2 インスタンスの OpenSSL メジャーバージョンは、SDK のビルドにダウンロードして使用する OpenSSL のメジャーバージョンと一致している必要があります。

  3. ライブラリをダウンロードしたら、アンリアルエンジン用の C++ サーバー SDK ライブラリをビルドします。

    GameLift-Cpp-ServerSDK-<version>ダウンロードした SDK 内のディレクトリ、でコンパイル-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フォルダ:

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

    • out\prefix\lib\aws-cpp-sdk-gamelift-server.lib

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

Amazon をインポートするには、以下の手順に従います。GameLiftサンプルプロジェクトにプラグインしてください。

アマゾンをインポートするGameLiftプラグイン
  1. アマゾンを追加GameLiftゲーム用のサーバーSDKプラグイン.uprojectファイル。

    この例では、アプリの名前はGameLiftUnrealApp、したがって、ファイルは次のようになりますGameLiftUnrealApp.uproject

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

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  3. ゲームが正しいか確認してModuleRulesプラグインに依存します。を開く.Build.csアマゾンをファイルして追加GameLiftServerSDK への依存関係。このファイルは以下にありますYour-application-name/Source//Your-application-name/

    たとえば、チュートリアルのファイルパスは../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs

  4. [追加]"GameLiftServerSDK"一覧の最後へPublicDependencyModuleNames

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

これで、プラグインがアプリケーションで動作するはずです。次のセクションに進んで Amazon を統合してくださいGameLift機能性をゲームに組み込む。

アマゾンを追加GameLiftUnreal プロジェクトのサーバーコード

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

Amazon でゲームサーバーを初期化するにはGameLift、以下の手順に従ってください。

注記

ジ・アマゾンGameLift-次のセクションで説明する特定のコードは、の用途によって異なりますWITH_GAMELIFTプリプロセッサフラグ。このフラグは、次の両方の条件が満たされた場合にのみ有効です。

  • Target.Type == TargetRules.TargetType.Server

  • プラグインはアマゾンを見つけましたGameLiftサーバー SDK バイナリ。

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

ゲームサーバーを Amazon と統合GameLift
  1. ビジュアルスタジオで、.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、で説明されているとおりアマゾンを追加GameLiftゲームサーバーへ。これには、以下のものが含まれます:

    • アマゾンの初期化GameLiftAPI クライアント。

    • Amazon からのリクエストに応答するコールバック関数の実装GameLiftサービス (含む)OnStartGameSessionOnProcessTerminate、およびonHealthCheck

    • 通話ProcessReady() Amazon に通知するポートを指定してくださいGameLiftserviceゲームセッションを主催する準備ができたら

    #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ファイルをアンリアルエディタで開きます。

  7. Unreal Editor で、ゲームのサーバービルドをパッケージ化します。ターゲットを選択するには、プラットフォームWindowsそして選択Your-application-name[サーバー]

  8. サーバーアプリケーションの構築プロセスを開始するには、プラットフォームWindowsそして選択パッケージプロジェクト。ビルドが完了すると、実行ファイルが用意されているはずです。この例の場合、ファイル名はGameLiftUnrealAppServer.exe

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

    アマゾンを作成する場合GameLiftフリートをサーバービルドする際には、実行時設定の起動パスとして実際のサーバー実行ファイルを渡すことをお勧めします。たとえば、ゲームのビルドフォルダーには、GameLiftFPS.exeルートにはファイル、もう 1 つはルートに\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe。フリートを作成する際には、以下を使用することをおすすめしますC:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exeランタイム設定の起動パスとして。

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

  11. 作成install.batゲームビルド用のファイル。このインストールスクリプトは、ゲームビルドが Amazon にデプロイされるたびに実行されます。GameLift艦隊。これが一例ですinstall.batファイル:

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

    へのファイルパスUE5PrereqSetup_x64.exeファイルはEngine\Extras\Redist\en-us

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

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

    注記

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

    • libssl-3-x64.dll

    • libcrypto-3-x64.dll

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

次のステップ

Unreal Engine 環境の設定とセットアップが完了しました。これで Amazon の統合を開始できます。GameLiftあなたのゲームに。

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

ゲームのテスト方法については、を参照してください。Amazon GameLift Anywhere フリートを使用してインテグレーションをテスト