將 Amazon GameLift 整合至 Unreal Engine 專案 - Amazon GameLift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Amazon GameLift 整合至 Unreal Engine 專案

本主題說明如何設定適用於 Unreal Engine 的 Amazon GameLift C++ 伺服器開發套件,並將其整合到您的遊戲專案中。

秘訣

開始將遊戲伺服器部署到 Amazon GameLift 進行託管。透過適用於 Unreal Engine 的 Amazon GameLift 獨立外掛程式,您可以整合遊戲程式碼、部署簡單但完整的託管解決方案,以及測試您的遊戲元件。請參閱 Unreal Engine 的 Amazon GameLift 外掛程式

其他資源:

先決條件

在您成功之前,請確定您具備下列先決條件:

先決條件

從來源建置 Unreal Engine

透過 Epic 啟動器下載的 Unreal Engine 編輯器標準版本,僅允許建置 Unreal 用戶端應用程式。若要建置 Unreal 伺服器應用程式,您需要使用 Unreal Engine Github 儲存庫,從來源下載並建置 Unreal Engine。如需詳細資訊,請參閱 Unreal Engine 文件網站上的從來源教學建置 Unreal Engine。

注意

如果您尚未這麼做,請遵循在 GitHub 上存取 Unreal Engine 原始程式碼的指示,將您的 GitHub 帳戶連結至您的 Epic Games 帳戶。

將 Unreal Engine 來源複製到您的開發環境
  1. 將 Unreal Engine 來源複製到您選擇的分支中的開發環境。

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. 取得 Amazon GameLift 外掛程式支援的 Unreal Engine 版本。如需 Unreal 版本支援對於遊戲伺服器,請參閱 。

    查看您用來開發遊戲的版本標籤。例如,下列範例會檢查 Unreal Engine 5.1.1 版:

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. 導覽至本機儲存庫的根資料夾。當您在根資料夾中時,請執行下列檔案:Setup.bat

  4. 在根資料夾中, 也會執行 檔案:GenerateProjectFiles.bat

  5. 執行先前步驟的檔案後,UE5.sln會建立 Unreal Engine 解決方案檔案 。開啟 Visual Studio,並在 Visual Studio 編輯器中開啟 UE5.sln 檔案。

  6. 在 Visual Studio 中,開啟檢視功能表,然後選擇解決方案瀏覽器選項。這會開啟 Unreal 專案節點的內容選單。在 Solution Explorer 視窗中,用滑鼠右鍵按一下UE5.sln檔案 (它可以僅列出為 UE5),然後選擇建置以使用開發編輯器 Win64 目標建置 Unreal 專案。

    注意

    建置可能需要一小時的時間才能完成。

建置完成後,您就可以開啟 Unreal Development Editor 並建立或匯入專案。

為伺服器 SDK 設定 Unreal 專案

請依照下列步驟,讓適用於 Unreal Engine 的 Amazon GameLift 伺服器開發套件準備好用於您的遊戲伺服器專案。

為伺服器 SDK 設定專案
  1. 開啟 Visual Studio 後,導覽至 Solution Explorer 窗格,然後選擇 UE5 檔案以開啟 Unreal 專案的內容選單。在內容功能表中,選擇設定為啟動專案選項。

  2. 在 Visual Studio 視窗頂端,選擇開始偵錯 (綠色箭頭)。

    此動作會啟動 Unreal Editor 的新來源建置執行個體。如需使用 Unreal Editor 的詳細資訊,請參閱 Unreal Engine 文件網站上的 Unreal Editor Interface

  3. 關閉您開啟的 Visual Studio 視窗,因為 Unreal Editor 會開啟另一個 Visual Studio 視窗,其中包含 Unreal 專案和您的遊戲專案。

  4. 在 Unreal 編輯器中,執行下列其中一項:

    • 選擇您要與 Amazon GameLift 整合的現有 Unreal 專案。

    • 建立新專案。若要實驗 Amazon GameLift 伺服器 SDK,請嘗試使用 Unreal 引擎的第三人範本。如需此範本的詳細資訊,請參閱 Unreal Engine 文件網站上的第三方範本

      或者,使用下列設定來設定新專案:

      • C++

      • 使用入門內容

      • 桌面

      • 專案名稱。在此主題中的範例中,我們命名了專案 GameLiftUnrealApp

  5. 在 Visual Studio 的 Solution Explorer 中,導覽至 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++ 伺服器開發套件程式庫,以便您可以將它們匯入您的專案。

建置適用於 Unreal 的 C++ 伺服器 SDK 程式庫
  1. 下載適用於 Unreal 的 Amazon GameLift C++ 伺服器開發套件

    注意

    將 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 Notes for Windows 平台文件。

    注意

    您用來建置 Amazon GameLift 伺服器開發套件的 OpenSSL 版本,應與 Unreal 用於封裝遊戲伺服器的 OpenSSL 版本相符。您可以在 Unreal 安裝目錄中找到版本資訊...Engine\Source\ThirdParty\OpenSSL

  3. 下載程式庫後,為 Unreal Engine 建置 C++ 伺服器開發套件程式庫。

    導覽至下載的 SDK 中的GameLift-Cpp-ServerSDK-<version>目錄,然後遵循您平台的步驟:

    Linux

    如需適用於 Amazon Linux 相容二進位檔和 OpenSSL 和 OpenCrypto 相依性的快速簡單自動化建置,請參閱在 Amazon Linux 上建置 Unreal Engine 5 的 Amazon GameLift Server SDK

    如果您想要手動執行此操作,請遵循此處的步驟。此方法預期在您的 Linux 環境中設定符合您 Unreal Engine 的正確 OpenSSL 版本,且 OpenSSL 和 OpenCrypto 程式庫已複製到您的伺服器建置。

    1. 執行下列命令:

      mkdir out cd out cmake -DBUILD_FOR_UNREAL=1 .. make

      這會建置 檔案:

      prefix/lib/aws-cpp-sdk-gamelift-server.so
    2. 複製建置至 Unreal 外掛程式資料夾中此位置的檔案:

      GameLiftPlugin/Source/GameLiftServer/ThirdParty/GameLiftServerSDK/Linux/x86_64-unknown-linux-gnu/
    3. 完成後,請確認您有類似此範例的檔案路徑:

      GameLiftPlugin/Source/GameLiftServer/ThirdParty/GameLiftServerSDK/Linux/x86_64-unknown-linux-gnu/aws-cpp-sdk-gamelift-server.so
    Windows
    1. 執行下列命令:

      mkdir out cd out cmake -G "Visual Studio 17 2022" -DBUILD_FOR_UNREAL=1 .. msbuild ALL_BUILD.vcxproj /p:Configuration=Release

      這會產生伺服器 SDK 所需的下列二進位檔案:

      prefix\bin\aws-cpp-sdk-gamelift-server.dll prefix\lib\aws-cpp-sdk-gamelift-server.lib
    2. 將建置的檔案複製到 Unreal 外掛程式資料夾中的這個位置:

      GameLiftPlugin\Source\GameLiftServer\ThirdParty\GameLiftServerSDK\Win64\
    3. 完成後,請確認您有兩個類似此範例的檔案路徑:

      GameLiftPlugin\Source\GameLiftServer\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.dll GameLiftPlugin\Source\GameLiftServer\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.lib
    Cross Compile from Windows to Linux
    1. 請依照在 Amazon Linux 上建置適用於 Unreal Engine 5 的 Amazon GameLift Server SDK 中的步驟,下載 C++ Server SDK 的 Linux 建置libaws-cpp-sdk-gamelift-server.so。下載套件也包含 檔案libssl.so.1.1libcrypto.so-.1.1這些檔案會在您封裝 Unreal 專案之後的後續步驟中使用。

    2. 將檔案複製到專案libaws-cpp-sdk-gamelift-server.soamazon-gamelift-plugin-unreal/GameLiftPlugin/Source/GameliftServer/ThirdParty/GameLiftServerSDK/Linux/x86_64-unknown-linux-gnu/ Amazon GameLift Unreal 外掛程式資料夾。

    如需如何建置 C++ SDK 的更詳細說明,請參閱位於 C++ SDK 目錄中的 README.md 檔案。

使用下列程序將 Amazon GameLift 伺服器 SDK 匯入您的範例專案。

匯入 Amazon GameLift 伺服器 SDK
  1. 找出您在先前程序中從下載中擷取的GameLiftServerSDK資料夾。

  2. Plugins遊戲專案根資料夾中找到 。(如果資料夾不存在,請在該處建立資料夾。)

  3. GameLiftServerSDK 資料夾複製到 Plugins

    這將允許 Unreal 專案查看伺服器 SDK。

  4. 將 Amazon GameLift 伺服器 SDK 新增至遊戲.uproject的檔案。

    在此範例中,應用程式稱為 GameLiftUnrealApp,因此檔案會是 GameLiftUnrealApp.uproject

  5. 編輯 .uproject 檔案,將伺服器 SDK 新增至您的遊戲專案。

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  6. 確定遊戲的 ModuleRules 對伺服器 SDK 具有相依性。開啟 .Build.cs 檔案並新增 Amazon GameLiftServerSDK 相依性。此檔案位於 下Your-application-name/Source//Your-application-name/

    例如,教學課程檔案路徑為 ../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs

  7. "GameLiftServerSDK" 新增至 清單的結尾PublicDependencyModuleNames

    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; } }

伺服器 SDK 現在應該適用於您的應用程式。繼續下一節,將 Amazon GameLift 功能整合到您的遊戲中。

將 Amazon GameLift 伺服器程式碼新增至 Unreal 專案

您已設定並設定 Unreal Engine 環境,現在可以將遊戲伺服器與 Amazon GameLift 整合。本主題中顯示的程式碼會呼叫 Amazon GameLift 服務。它還實作一組回呼函數,以回應來自 Amazon GameLift 服務的請求。如需每個函數和程式碼功能的詳細資訊,請參閱初始化伺服器程序。如需此程式碼中所用 SDK 動作和資料類型的詳細資訊,請參閱 Unreal Engine 的 Amazon GameLift 伺服器 SDK 5.x -- 動作

若要使用 Amazon GameLift 初始化遊戲伺服器,請使用下列程序。

注意

下一節提供的 Amazon GameLift 特定程式碼取決於WITH_GAMELIFT使用前置處理器旗標。只有在同時滿足下列兩個條件時,此旗標才為 true:

  • Target.Type == TargetRules.TargetType.Server

  • 遊戲專案會辨識 Amazon GameLift 伺服器 SDK 二進位檔。

這可確保只有 Unreal 伺服器建置會叫用 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 用戶端。

    • 實作回呼函數來回應來自 Amazon GameLift 服務的請求,包括 OnStartGameSessionOnProcessTerminateonHealthCheck

    • 使用指定的連接埠呼叫 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) } if (FParse::Value(FCommandLine::Get(), TEXT("-awsregion="), serverParameters.m_awsRegion)) { UE_LOG(GameServerLog, Log, TEXT("AWS_REGION: %s"), *serverParameters.m_awsRegion) } if (FParse::Value(FCommandLine::Get(), TEXT("-accesskey="), serverParameters.m_accessKey)) { UE_LOG(GameServerLog, Log, TEXT("ACCESS_KEY: %s"), *serverParameters.m_accessKey) } if (FParse::Value(FCommandLine::Get(), TEXT("-secretkey="), serverParameters.m_secretKey)) { UE_LOG(GameServerLog, Log, TEXT("SECRET_KEY: % s"), *serverParameters.m_secretKey) } if (FParse::Value(FCommandLine::Get(), TEXT("-sessiontoken="), serverParameters.m_sessionToken)) { UE_LOG(GameServerLog, Log, TEXT("SESSION_TOKEN: %s"), *serverParameters.m_sessionToken) } //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) } FString glProcessId = ""; if (FParse::Value(FCommandLine::Get(), TEXT("-processId="), glProcessId)) { serverParameters.m_processId = TCHAR_TO_UTF8(*glProcessId); } else { // If no ProcessId is passed as a command line argument, generate a randomized unique string. FString TimeString = FString::FromInt(std::time(nullptr)); FString ProcessId = "ProcessId_" + TimeString; serverParameters.m_processId = TCHAR_TO_UTF8(*ProcessId); } //The PID of the running process 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. 為下列兩種目標類型建置遊戲專案:Development EditorDevelopment Server

    注意

    您不需要重建解決方案。相反地,只需在符合應用程式名稱的Games資料夾下建置專案。否則 Visual Studio 會重建整個 UE5 專案,這可能需要一小時的時間。

  6. 兩個組建完成後,請關閉 Visual Studio 並開啟專案.uproject的檔案,以在 Unreal Editor 中開啟。

  7. 在 Unreal Editor 中,封裝遊戲的伺服器建置。若要選擇目標,請前往平台WindowsYour-application-nameServer

  8. 若要開始建置伺服器應用程式的程序,請前往平台Windows 並選取套件專案。當建置完成時,您應該具有可執行檔。在我們的範例中,檔案名稱為 GameLiftUnrealAppServer.exe

  9. 在 Unreal Editor 中建置伺服器應用程式會產生兩個可執行檔。一個位於遊戲組建資料夾的根目錄中,並充當實際伺服器可執行檔的包裝函式。

    使用伺服器建置建立 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. 在 Windows 上:為您的遊戲組建建立 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 作業系統,OpenSSL 格式為 .dll

    注意

    在遊戲伺服器建置中封裝 OpenSSL DLL/SO 檔案。請務必封裝您在建置遊戲伺服器時所使用的相同 OpenSSL 版本。

    • libssl-1_1-x64.dll (Windows) 或 libssl.so.1.1(Linux)

      libcrypto-1_1-x64.dll (Windows) 或 libcrypto.so.1.1(Linux)

    將您的相依性與遊戲伺服器可執行檔封裝在 zip 檔案的根目錄中。例如,在 Windows openssl-lib 上,dll 應與 .exe 檔案位於相同的目錄中。

後續步驟

您已設定並設定 Unreal Engine 環境,現在可以開始將 Amazon GameLift 整合到您的遊戲中。

如需將 Amazon GameLift 新增至遊戲的詳細資訊,請參閱以下內容:

如需測試遊戲的說明,請參閱 使用 Amazon 設定本機測試 GameLift Anywhere