翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アマゾンを統合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リポジトリを使用して、ソースからアンリアルエンジンをダウンロードしてビルドする必要があります。詳細については、を参照してください。ソースからアンリアルエンジンをビルド
注記
まだ行っていない場合は、次の指示に従ってくださいでアンリアルエンジンのソースコードにアクセスするGitHub
Unreal Engine ソースを開発環境に複製するには
-
Unreal Engine ソースを任意のブランチの開発環境に複製します。
git clone https://github.com/EpicGames/UnrealEngine.git
-
ゲームの開発に使用しているバージョンのタグを確認してください。たとえば、次の例では Unreal Engine バージョン 5.1.1 をチェックアウトしています。
git checkout tags/5.1.1-release -b 5.1.1-release
-
ローカルリポジトリのルートフォルダに移動します。ルートフォルダーに移動したら、次のファイルを実行します。
Setup.bat
。 -
ルートフォルダーに入っている状態で、次のファイルも実行します。
GenerateProjectFiles.bat
。 -
前のステップで作成したファイル、Unreal Engine ソリューションファイルを実行すると、
UE5.sln
、が作成されます。[開く]ビジュアルスタジオ、そして Visual Studio エディタでUE5.sln
ファイル。 -
ビジュアルスタジオで、[ビュー]メニューと選択ソリューションエクスプローラーオプション。これにより、Unreal プロジェクトノードのコンテキストメニューが開きます。にソリューションエクスプローラーウィンドウを右クリック
UE5.sln
ファイル (単体でも表示できます)UE5
) を選択し、ビルド開発エディターの Win64 ターゲットで Unreal プロジェクトをビルドします。注記
ビルドが完了するまでに 1 時間以上かかる場合があります。
ビルドが完了すると、Unreal Development Editor を開いてプロジェクトを作成またはインポートする準備が整います。
Unreal プロジェクトをプラグイン用に設定する
Amazonを入手するには、以下の手順に従ってくださいGameLiftゲームサーバープロジェクトに対応した Unreal Engine 用サーバー SDK プラグイン
プラグイン用にプロジェクトを設定するには
-
Visual Studio を開いた状態で、ソリューションエクスプローラーペインをクリックし、
UE5
ファイルを選択して Unreal プロジェクトのコンテキストメニューを開きます。コンテキストメニューで、スタートアッププロジェクトとして設定オプション。 -
Visual Studio ウィンドウの上部にあるデバッグを開始する(緑の矢印)
このアクションにより、ソースビルドの Unreal Editor の新しいインスタンスが起動します。Unreal Editor の使用方法の詳細については、以下を参照してください。アンリアルエディターインターフェイス
アンリアルエンジンのドキュメンテーションウェブサイトにあります。 -
アンリアルエディタは、アンリアルプロジェクトとゲームプロジェクトを含む別の Visual Studio ウィンドウを開くので、開いた Visual Studio ウィンドウを閉じます。
-
Unreal エディタで、次のいずれかを実行します。
Amazon と統合したい既存の Unreal プロジェクトを選択してくださいGameLift。
-
新しいプロジェクトを作成します。アマゾンを試してみるにはGameLiftアンリアル用のプラグイン、アンリアルエンジンを使用してみてくださいサードパーソンテンプレート。このテンプレートの詳細については、以下を参照してください。サードパーソンテンプレート
アンリアルエンジンのドキュメンテーションウェブサイトにあります。 または、次の設定で新しいプロジェクトを構成してください。
C++
スターターコンテンツ付き
Desktop
プロジェクト名。このトピックの例では、プロジェクトに名前を付けました
GameLiftUnrealApp
。
ビジュアルスタジオではソリューションエクスプローラー、Unreal プロジェクトの場所に移動します。イン・ザ・アンリアル
Source
フォルダ、という名前のファイルを検索
。Your-application-name
.Target.cs例:
GameLiftUnrealApp.Target.cs
。このファイルのコピーを作成し、コピーに次の名前を付けます。
。Your-application-name
Server.Target.cs新しいファイルを開き、次の変更を行います。
を変更
class
そしてconstructor
ファイル名と一致するようにしてください。を変更
Type
からTargetType.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 ライブラリをビルドして、プロジェクトにインポートできるようにすることです。
アンリアル用の C++ サーバー SDK ライブラリをビルドするには
-
のダウンロードアマゾン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
。 OpenSSL をダウンロードしてインストールします。OpenSSL のダウンロードに関する詳細については、Github を参照してください。OpenSSL のビルドとインストール
ドキュメンテーション。 詳細については、OpenSSL を参照してください。Windows プラットフォームに関する注意事項
ドキュメンテーション。 注記
ジ・アマゾンGameLiftEC2 インスタンスの OpenSSL メジャーバージョンは、SDK のビルドにダウンロードして使用する OpenSSL のメジャーバージョンと一致している必要があります。
-
ライブラリをダウンロードしたら、アンリアルエンジン用の C++ サーバー SDK ライブラリをビルドします。
に
GameLift-Cpp-ServerSDK-
ダウンロードした SDK 内のディレクトリ、でコンパイル<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
フォルダ:-
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プラグイン
-
アマゾンを追加GameLiftゲーム用のサーバーSDKプラグイン
.uproject
ファイル。この例では、アプリの名前は
GameLiftUnrealApp
、したがって、ファイルは次のようになりますGameLiftUnrealApp.uproject
。 -
を編集
.uproject
ファイルを使ってプラグインをゲームプロジェクトに追加します。"Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
ゲームが正しいか確認してModuleRulesプラグインに依存します。を開く
.Build.cs
アマゾンをファイルして追加GameLiftServerSDK への依存関係。このファイルは以下にあります
。Your-application-name
/Source//Your-application-name/
たとえば、チュートリアルのファイルパスは
../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs
。[追加]
"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
-
ビジュアルスタジオで、
.sln
アプリケーション用のファイル。この例では、ファイルGameLiftUnrealApp.sln
はルートフォルダにあります。 -
ソリューションを開いた状態で、アプリケーションを探します
ファイル。例えば、Your-application-name
GameMode.hGameLiftUnrealAppGameMode.h
などです。 -
ヘッダーファイルを次のコード例に合わせて変更します。必ず交換してください。」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(); };
-
関連するソースファイルを開きます
ファイル。この例では以下のようになります。Your-application-name
GameMode.cppGameLiftUnrealAppGameMode.cpp
. そして、次のコード例に合わせてコードを変更してください。必ず交換してください。」GameLiftUnrealApp「独自のアプリケーション名で。このサンプルでは、Amazon との統合に必要な要素をすべて追加する方法を示しています。GameLift、で説明されているとおりアマゾンを追加GameLiftゲームサーバーへ。これには、以下のものが含まれます:
-
アマゾンの初期化GameLiftAPI クライアント。
-
Amazon からのリクエストに応答するコールバック関数の実装GameLiftサービス (含む)
OnStartGameSession
、OnProcessTerminate
、および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); }
-
-
次の両方のターゲットタイプのゲームプロジェクトをビルドします。開発エディターそして開発サーバー。
注記
ソリューションを再構築する必要はありません。代わりに、以下のプロジェクトだけをビルドしてください
Games
アプリの名前と一致するフォルダー。そうしないと、Visual Studio が UE5 プロジェクト全体を再構築しますが、これには最大 1 時間かかる場合があります。 -
両方のビルドが完了したら、Visual Studio を閉じてプロジェクトを開きます
.uproject
ファイルをアンリアルエディタで開きます。 -
Unreal Editor で、ゲームのサーバービルドをパッケージ化します。ターゲットを選択するには、プラットフォーム、Windowsそして選択
Your-application-name[サーバー]
。 -
サーバーアプリケーションの構築プロセスを開始するには、プラットフォーム、Windowsそして選択パッケージプロジェクト。ビルドが完了すると、実行ファイルが用意されているはずです。この例の場合、ファイル名は
GameLiftUnrealAppServer.exe
。 -
Unreal Editor でサーバーアプリケーションをビルドすると、2 つの実行ファイルが生成されます。1 つはゲームビルドフォルダーのルートにあり、実際のサーバー実行ファイルのラッパーとして機能します。
アマゾンを作成する場合GameLiftフリートをサーバービルドする際には、実行時設定の起動パスとして実際のサーバー実行ファイルを渡すことをお勧めします。たとえば、ゲームのビルドフォルダーには、
GameLiftFPS.exe
ルートにはファイル、もう 1 つはルートに\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
。フリートを作成する際には、以下を使用することをおすすめしますC:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
ランタイム設定の起動パスとして。 -
Amazon で必要な UDP ポートを必ず開いてくださいGameLiftゲームサーバーがゲームクライアントと通信できるようにするためのフリートです。デフォルトでは、アンリアルエンジンはポートを使用します
7777
。詳細については、以下を参照してください。UpdateFleetPortSettingsアマゾンでGameLiftサービス API リファレンスガイド -
作成
ゲームビルド用のファイル。このインストールスクリプトは、ゲームビルドが Amazon にデプロイされるたびに実行されます。GameLift艦隊。これが一例ですinstall.bat
install.bat
ファイル:VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q
注記
へのファイルパス
UE5PrereqSetup_x64.exe
ファイルはEngine\Extras\Redist\en-us
。 -
これで、ゲームビルドをパッケージ化して Amazon にアップロードできるようになりましたGameLift。
ビルドに使用する OpenSSL のバージョンは、ゲームサーバーで使用されるバージョンと一致する必要があります。ゲームサーバーのビルドには、必ず正しい OpenSSL バージョンをパッケージしてください。Windows OS の場合、OpenSSL 形式は次のようになります。
.dll
。注記
OpenSSL DLLS をゲームサーバービルドにパッケージ化します。必ず、ゲームサーバーのビルド時に使用したのと同じバージョンの DLL を使用してください。
-
libssl-3-x64.dll
-
libcrypto-3-x64.dll
依存関係をゲームサーバーの実行ファイルとともに zip ファイルのルートにパッケージ化します。たとえば、
openssl-lib
dllsはと同じディレクトリにある必要があります.exe
ファイル。 -
次のステップ
Unreal Engine 環境の設定とセットアップが完了しました。これで Amazon の統合を開始できます。GameLiftあなたのゲームに。
Amazon の追加に関する詳細についてはGameLiftゲームについては、以下を参照してください。
ゲームのテスト方法については、を参照してください。Amazon GameLift Anywhere フリートを使用してインテグレーションをテスト 。