Añade Amazon GameLift a un proyecto de servidor de juegos de Unreal Engine - Amazon GameLift

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Añade Amazon GameLift a un proyecto de servidor de juegos de Unreal Engine

Sigue las instrucciones de este tema para configurar y usar el complemento Amazon GameLift Server SDK para Unreal Engine en tus proyectos de servidores de juegos.

Requisitos previos
  • Un ordenador con Windows capaz de ejecutar Unreal Engine.

  • Cualquiera de las siguientes:

    • Microsoft Visual Studio 2019.

    • Colección de compiladores GNU (GCC) 4.9 o posterior.

  • CMake versión 3.1 o posterior.

  • Un cliente Git disponible en PATH.

  • Para obtener información sobre la compilación cruzada para Linux en un ordenador con Windows, consulte la cadena de herramientas de compilación cruzada en los requisitos de desarrollo de juegos para Linux en el sitio web de documentación de Unreal Engine.

  • Una suscripción a Unreal Engine.

  • Una GitHub cuenta asociada a tu cuenta de Unreal Engine. Para obtener más información, consulta Acceder al código fuente de Unreal Engine GitHub en el sitio web de Unreal Engine.

Crea Unreal Engine desde la fuente

Para especificar un destino de servidor para una compilación o realizar una compilación cruzada para Linux, debes compilar Unreal Engine desde el código fuente. Para obtener más información, consulta el tutorial Cómo crear Unreal Engine a partir de código fuente en el sitio web de documentación de Unreal Engine.

En su entorno de desarrollo
  1. Clona la fuente de Unreal Engine en tu entorno de desarrollo.

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. Consulta la etiqueta de la versión que estás usando para desarrollar tu juego. Por ejemplo:

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. En la carpeta raíz de la fuente que ha extraído, ejecutesetup.bat.

  4. En la misma carpeta, ejecutaGenerateProjectFiles.bat.

En Visual Studio
  1. abra el archivo de solución de Unreal Engine que creó en el procedimiento anterior. Por ejemplo, UE5.sln.

  2. En el panel Solution Explorer de soluciones, abra el menú contextual (haga clic con el botón derecho) del nodo de proyectos de Unreal. (Por ejemplo,UE5.) A continuación, elija Build para crear el proyecto Unreal con el objetivo Win64 del Editor de Desarrollo.

    nota

    La construcción puede tardar un tiempo en completarse.

  3. En el panel Explorador de soluciones, vuelva a abrir el menú contextual del proyecto Unreal y, a continuación, seleccione Establecer como proyecto de inicio.

  4. En la parte superior de la ventana de Visual Studio, seleccione la flecha verde (Iniciar depuración).

    Se inicia una nueva instancia de Unreal Editor creada en código fuente. Para obtener más información sobre Unreal Editor, consulte la interfaz de Unreal Editor en el sitio web de documentación de Unreal Engine.

En Unreal Editor
  1. Haga una de estas dos operaciones:

    • Elige un proyecto existente.

    • Crea un nuevo proyecto utilizando el contenido inicial de la plantilla en tercera persona. Para obtener más información sobre esta plantilla, consulta la plantilla en tercera persona en el sitio web de documentación de Unreal Engine.

    Unreal Editor abre una solución de Visual Studio que contiene el proyecto Unreal y tu proyecto de juego. El proyecto ya está inicializado.

  2. Cierre la ventana de Visual Studio y continúe en Unreal Engine.

Configura el GameLift complemento de Amazon para Unreal Engine

Sigue estos pasos para preparar el complemento Amazon GameLift Server SDK para Unreal Engine para tus proyectos de servidor de juegos.

En su entorno de desarrollo
  1. Descargue el SDK GameLift del servidor de Amazon.

  2. Cree las bibliotecas del SDK de C++ Server para Unreal Engine.

    En elGameLift-cpp-ServerSDK-<version> directorio del SDK descargado, compile con el-DBUILD_FOR_UNREAL=1 parámetro y cree el SDK del servidor. En los siguientes ejemplos se muestra cómo compilar concmake.

    • Para Windows:

      1. Ejecute lo siguiente:

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

        La compilación de Windows crea los siguientes archivos binarios en laout\gamelift-server-sdk\Release carpeta:

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

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

      2. Copia los dos archivos de la biblioteca a laThirdParty\GameLiftServerSDK\Win64 carpeta del paquete de complementos Amazon GameLift Unreal Engine.

    • Para Linux:

      1. Ejecute lo siguiente:

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

        La compilación de Linux genera el siguiente archivo binario en elout/gamelift-server-sdk directorio:

        • out/prefix/lib/libaws-cpp-sdk-gamelift-server.so

      2. Copia el archivo de biblioteca alThirdParty\GameLiftServerSDK\Linux\x86_64-unknown-linux-gnu directorio del paquete de complementos Amazon GameLift Unreal Engine.

    Para obtener más información sobre la creación del SDK de C++, incluidos los requisitos mínimos y las opciones de compilación, consulta elREADME.md archivo incluido en la descarga.

  3. Importa el GameLift complemento de Amazon a tu proyecto.

    1. En su paquete de proyectos, cree un directorio denominadoPlugins.

    2. Copia elGameLiftServerSDK directorio en elPlugins directorio recién creado en tu paquete de proyecto.

    3. Añada el complemento al proyecto de juego. Los archivos de complemento deben contener todos los elementos del directorio GameLiftServerSDK del complemento, incluidos los archivos binarios generados.

    4. Edita el.uproject archivo para añadir el complemento a tu proyecto de juego.

      "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
    5. Para incluir el complemento como una dependencia de compilación en el de tu proyectoModuleRules, edita elProjectName.Build.cs archivo en elSource/ProjectName directorio.

      // Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; public class test23 : ModuleRules { public test23(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "GameLiftServerSDK" }); } }
  4. Cree un destino de servidor para el proyecto.

    1. Copia elProjectName.Target.cs archivo en un archivo nuevo llamadoProjectNameServer.Target.cs.

    2. En elProjectNameServer.Target.cs archivo, edite la definición de la clase para que coincida con el nuevo nombre y actualice laTargetType aServer.

      // Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; using System.Collections.Generic; public class testGameLift23ServerTarget : TargetRules { public testGameLift23ServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; ExtraModuleNames.Add("testGameLift23"); } }

      Este archivo tiene un aspecto diferente según la versión de Unreal Engine.

  5. Genera y abre tu proyecto.

    1. En los archivos de proyecto, abra el menú contextual (haga clic con el botón derecho) deluProject archivo y elija Generar archivos de proyecto de Visual Studio.

    2. En Visual Studio, abra el archivo de solución del proyecto.

      En su estructura de directorios, ahora debería ver unaPlugins carpeta y un nuevo destino de servidor.

Añadir GameLift código de Amazon

Ahora el complemento está listo para usarse, pero no has escrito código para usarlo. Para empezar, usa losGameMode archivos existentes incluidos en el proyecto de ejemplo de Unreal Engine. Los siguientes ejemplos de código incluyenGameMode.cpp archivos modificadosGameMode.h y.

GameMode.h

// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "GameLift426TestGameMode.generated.h" DECLARE_LOG_CATEGORY_EXTERN(GameServerLog, Log, All); UCLASS(minimalapi) class AGameLift426TestGameMode : public AGameModeBase { GENERATED_BODY() public: AGameLift426TestGameMode(); protected: virtual void BeginPlay() override; private: void InitGameLift(); };

GameMode.cpp

// Copyright Epic Games, Inc. All Rights Reserved. #include "GameLift426TestGameMode.h" #include "GameLift426TestCharacter.h" #include "UObject/ConstructorHelpers.h" #include "GameLiftServerSDK.h" DEFINE_LOG_CATEGORY(GameServerLog); AGameLift426TestGameMode::AGameLift426TestGameMode() { UE_LOG(LogInit, Log, TEXT("Game Mode Constructor")); // set default pawn class to our Blueprinted character static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter")); if (PlayerPawnBPClass.Class != NULL) { DefaultPawnClass = PlayerPawnBPClass.Class; } } void AGameLift426TestGameMode::BeginPlay() { #if WITH_GAMELIFT InitGameLift(); #endif } void AGameLift426TestGameMode::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 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 ID 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 EC2 or 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 will establish a local connection with GameLift's agent to enable further communication. gameLiftSdkModule->InitSDK(serverParameters); //When a game session is created, GameLift sends an activation request to the game server and passes along the game session object containing game properties and other settings. //Here is where a game server should take action based on the game session object. //Once the game server is ready to receive incoming player connections, it should invoke GameLiftServerAPI.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(); }; FProcessParameters params; params.OnStartGameSession.BindLambda(onGameSession); //OnProcessTerminate callback. GameLift will invoke this callback before shutting down an instance hosting this game server. //It gives this game server a chance to save its state, communicate with services, etc., before being shut down. //In this case, we simply tell GameLift we are indeed going to shutdown. params.OnTerminate.BindLambda([=]() { UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating")); gameLiftSdkModule->ProcessEnding(); }); //This is the HealthCheck callback. //GameLift will invoke this callback every 60 seconds or so. //Here, a game server might want to check the health of dependencies and such. //Simply return true if healthy, false otherwise. //The game server has 60 seconds to respond with its health status. GameLift will default to 'false' if the game server doesn't respond in time. //In this case, we're always healthy! params.OnHealthCheck.BindLambda([]() { UE_LOG(GameServerLog, Log, TEXT("Performing Health Check")); return true; }); //This game server tells GameLift that it will listen on port 7777 for incoming player connections. params.port = 7777; //Here, the game server tells GameLift what set of files to upload when the game session ends. //GameLift will upload everything specified here for the developers to fetch later. TArray<FString> logfiles; logfiles.Add(TEXT("GameLift426Test/Saved/Logs/GameLift426Test.log")); params.logParameters = logfiles; //Calling ProcessReady tells GameLift this game server is ready to receive incoming game sessions! UE_LOG(GameServerLog, Log, TEXT("Calling Process Ready")); gameLiftSdkModule->ProcessReady(params); }

Pasos siguientes

Has configurado y configurado tu entorno de Unreal Engine y ya puedes empezar a GameLift integrar Amazon en tu juego.

Para obtener más información acerca de cómo añadir Amazon GameLift a su juego, consulte los siguientes temas:

Para obtener instrucciones sobre cómo probar el juego, consultaProbar de la integración de servidores personalizada.