Integre Amazon GameLift en un proyecto 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.

Integre Amazon GameLift en un proyecto de Unreal Engine

En este tema se explica cómo configurar el complemento SDK del servidor Amazon GameLift C++ para Unreal Engine e integrarlo en tus proyectos de juegos.

Recursos adicionales:

Requisitos previos

Antes de continuar, asegúrese de comprobar que se cumplen los siguientes requisitos previos:

Requisitos previos
  • Un ordenador con capacidad para ejecutar Unreal Engine. Para obtener más información sobre los requisitos de Unreal Engine, consulte la documentación Especificaciones de hardware y software de Unreal Engine.

  • Microsoft Visual Studio 2019 o una versión posterior.

  • Versión 3.1 o posterior de CMake.

  • Versión 3.6 o posterior de Python.

  • Un cliente Git disponible en PATH.

  • Una cuenta de Epic Games. Cree una cuenta en el sitio web oficial de Unreal Engine.

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

nota

Amazon GameLift actualmente admite las siguientes versiones de Unreal Engine:

  • 4.22

  • 4.23

  • 4.24

  • 4.25

  • 4.26

  • 4.27

  • 5.1.0

  • 5.1.1

  • 5.2

  • 5.3

Compilación de Unreal Engine a partir del código fuente

Las versiones estándar del editor de Unreal Engine, descargadas a través del lanzador de Epic solo permiten compilar aplicaciones cliente de Unreal. Para compilar una aplicación de servidor de Unreal, debe descargar y compilar Unreal Engine a partir del código fuente mediante el repositorio de Github de Unreal Engine. Para obtener más información, consulte el tutorial https://docs.unrealengine.com/5.1/building-unreal-engine-from-source/ en el sitio web de documentación de Unreal Engine.

nota

Si aún no lo has hecho, sigue las instrucciones que aparecen en Acceder al código fuente de Unreal Engine GitHub para vincular tu GitHub cuenta a tu cuenta de Epic Games.

Clonación del código fuente de Unreal Engine en su entorno de desarrollo
  1. Clone el código fuente de Unreal Engine en su entorno de desarrollo en la ramificación que elija.

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. Consulte la etiqueta de la versión que está utilizando para desarrollar el juego. Por ejemplo, en el siguiente ejemplo se muestra la versión 5.1.1 de Unreal Engine:

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. Diríjase a la carpeta raíz del repositorio local. Cuando esté en la carpeta raíz, ejecute el siguiente archivo:Setup.bat.

  4. Mientras esté en la carpeta raíz, ejecute también el archivo: GenerateProjectFiles.bat.

  5. Después de ejecutar los archivos de los pasos anteriores, se creará un archivo de solución de Unreal Engine, UE5.sln. Abra Visual Studio y, en el editor de Visual Studio, abra el archivo UE5.sln.

  6. En Visual Studio, abra el menú Ver y elija la opción Explorador de soluciones. De esa forma, se abrirá el menú contextual del nodo del proyecto de Unreal. En la ventana del Explorador de soluciones, haga clic con el botón derecho en el archivo UE5.sln (puede aparecer como UE5) y, a continuación, seleccione Compilar para compilar el proyecto de Unreal con el objetivo Win64 del editor de desarrollo.

    nota

    Para completar la compilación se precisa más de una hora.

Una vez completada la compilación, estará listo para abrir el editor de desarrollo de Unreal y crear o importar un proyecto.

Configuración de un proyecto de Unreal para el complemento

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

Configuración de un proyecto para el complemento
  1. Con Visual Studio abierto, diríjase al panel del Explorador de soluciones y elija el archivo UE5 para abrir el menú contextual del proyecto de Unreal. En el menú contextual, elija la opción Establecer como proyecto de inicio.

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

    Esta acción inicia la nueva instancia de Unreal Editor creada en código fuente. Para obtener más información sobre el uso del editor de Unreal, consulte Interfaz del editor de Unreal en el sitio web de documentación de Unreal Engine.

  3. Cierre la ventana de Visual Studio que ha abierto, ya que el editor de Unreal abre otra ventana de Visual Studio que contiene el proyecto de Unreal y el proyecto de juego.

  4. En el editor de Unreal, realice uno de los siguientes procedimientos:

    • Elige un proyecto de Unreal existente que quieras integrar con Amazon GameLift.

    • Cree un nuevo proyecto de . Para experimentar con el GameLift plugin de Amazon para Unreal, prueba a usar la plantilla en tercera persona del motor Unreal. Para obtener más información sobre esta plantilla, consulte la plantilla Tercera persona en el sitio web de documentación de Unreal Engine.

      También puede configurar un nuevo proyecto con la siguiente configuración:

      • C++

      • Con contenido inicial

      • Escritorio

      • Un nombre de proyecto. En los ejemplos de este tema, asignamos un nombre a nuestro proyecto GameLiftUnrealApp.

  5. En el Explorador de soluciones de Visual Studio, diríjase a la ubicación de su proyecto de Unreal. En la carpeta Source de Unreal, busque un archivo denominado Your-application-name.Target.cs.

    Por ejemplo: GameLiftUnrealApp.Target.cs.

  6. Realice una copia del archivo y asígnele el nombre Your-application-nameServer.Target.cs.

  7. Abra el archivo nuevo y realice los cambios siguientes:

    • Cambie los valores class y constructor para que coincidan con el nombre del archivo.

    • Cambie el valor Type de TargetType.Game a TargetType.Server.

    • El archivo final tendrá un aspecto semejante al siguiente:

      public class GameLiftUnrealAppServerTarget : TargetRules { public GameLiftUnrealAppServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; ExtraModuleNames.Add("GameLiftUnrealApp"); } }

Tu proyecto ahora está configurado para aceptar el complemento Amazon GameLift Server SDK.

La siguiente tarea consiste en compilar las bibliotecas del SDK del servidor C++ para Unreal de forma que pueda importarlas en su proyecto.

Para compilar las bibliotecas del SDK del servidor C++ para Unreal, realice el siguiente procedimiento:
  1. Descargue el complemento SDK del servidor Amazon GameLift C++ para Unreal.

    nota

    Colocar el SDK en el directorio de descargas predeterminado puede provocar un error de compilación debido a que la ruta supera el límite de 260 caracteres. Por ejemplo: C:\Users\Administrator\Downloads\GameLift-SDK-Release-06_15_2023\GameLift-Cpp-ServerSDK-5.0.4

    Le recomendamos que traslade el SDK a otro directorio, por ejemplo C:\GameLift-Cpp-ServerSDK-5.0.4.

  2. Descargue e instale OpenSSL. Para obtener más información sobre la descarga de OpenSSL, lea la documentación de compilación e instalación de OpenSSL de Github.

    Para obtener más información, lea la documentación de Notas de para plataformas Windows de OpenSSL.

    nota

    La versión de OpenSSL que utilices para crear el SDK del servidor de GameLift Amazon debe coincidir con la versión de OpenSSL utilizada por Unreal para empaquetar el servidor de juegos. Puedes encontrar información sobre la versión en el directorio de instalación de Unreal. ...Engine\Source\ThirdParty\OpenSSL

  3. Con las bibliotecas descargadas, cree las bibliotecas del SDK del servidor C++ para Unreal Engine.

    En el directorio GameLift-Cpp-ServerSDK-<version> del SDK descargado, realice la compilación con el parámetro -DBUILD_FOR_UNREAL=1 y compile el SDK del servidor. Los siguientes ejemplos muestran cómo realizar la compilación mediante cmake.

    Ejecute los siguientes comandos en el terminal:

    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

    La compilación de Windows crea los siguientes archivos binarios en la carpeta 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

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

Usa el siguiente procedimiento para importar el GameLift plugin de Amazon a tu proyecto de ejemplo.

Importar el GameLift plugin de Amazon
  1. Localice la GameLiftServerSDK carpeta que extrajo del complemento en el procedimiento anterior.

  2. Ubícala Plugins en la carpeta raíz del proyecto del juego. (Si la carpeta no existe, créala allí).

  3. Copie la GameLiftServerSDK carpeta enPlugins.

    Esto permitirá que el proyecto Unreal vea el complemento.

  4. Añade el complemento SDK GameLift del servidor Amazon al .uproject archivo del juego.

    En el ejemplo, la aplicación se llama GameLiftUnrealApp, por lo que el archivo será GameLiftUnrealApp.uproject

  5. Edite el archivo .uproject para añadir el complemento al proyecto de juego.

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  6. Asegúrate de que el juego ModuleRules dependa del complemento. Abre el .Build.cs archivo y añade la dependencia de Amazon GameLiftServer SDK. El archivo se encuentra en Your-application-name/Source//Your-application-name/.

    Por ejemplo, la ruta del archivo del tutorial es ../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs.

  7. Añada "GameLiftServerSDK" al final de la lista de 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; } }

El complemento debería funcionar ahora para su aplicación. Continúa con la siguiente sección para integrar las GameLift funciones de Amazon en tu juego.

Agrega el código GameLift del servidor de Amazon a tu proyecto Unreal

Has configurado y configurado tu entorno de Unreal Engine y ahora puedes integrar un servidor de juegos con Amazon GameLift. El código que se presenta en este tema hace que las llamadas al GameLift servicio de Amazon sean obligatorias. También implementa un conjunto de funciones de devolución de llamadas que responden a las solicitudes del GameLift servicio de Amazon. Para obtener más información sobre cada función y lo que hace el código, consulte Inicialización del proceso del servidor. Para obtener más información sobre las acciones del SDK y los tipos de datos que se utilizan en este código, consulte Referencia del SDK del servidor de Amazon GameLift para Unreal Engine.

Para inicializar un servidor de juegos con Amazon GameLift, sigue el siguiente procedimiento.

nota

El código GameLift específico de Amazon que se proporciona en la siguiente sección depende del uso de un indicador de WITH_GAMELIFT preprocesador. Este indicador solo es válido cuando se cumplen estas dos condiciones:

  • Target.Type == TargetRules.TargetType.Server

  • Los complementos encontraron los binarios GameLift del SDK del servidor Amazon.

Esto garantiza que solo las compilaciones de Unreal Server invoquen la API GameLift de backend de Amazon. También le permitirá escribir código que se ejecutará correctamente para todos los destinos diferentes de Unreal que pueda producir el juego.

Integrar un servidor de juegos con Amazon GameLift
  1. En Visual Studio, abra el archivo .sln de su aplicación. En nuestro ejemplo, el archivo GameLiftUnrealApp.sln se encuentra en la carpeta raíz.

  2. Con la solución abierta, localice el archivo Your-application-nameGameMode.h de su aplicación. Ejemplo:GameLiftUnrealAppGameMode.h.

  3. Cambie el archivo de encabezado para alinearlo con el siguiente código de ejemplo. Asegúrese de sustituir "GameLiftUnrealApp" por el nombre de su propia aplicación.

    #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. Abra el archivo Your-application-nameGameMode.cpp del archivo de origen relacionado. En nuestro ejemplo: GameLiftUnrealAppGameMode.cpp, y cambie el código para que se alinee con el siguiente código de ejemplo. Asegúrese de sustituir "GameLiftUnrealApp" por el nombre de su propia aplicación.

    En este ejemplo se muestra cómo añadir todos los elementos necesarios para la integración con Amazon GameLift, tal y como se describe en Añadir Amazon GameLift a tu servidor de juegos. Esto incluye:

    • Inicialización de un cliente GameLift API de Amazon.

    • Implementar funciones de devolución de llamadas para responder a las solicitudes del GameLift servicio de Amazon, incluidas OnStartGameSessionOnProcessTerminate, yonHealthCheck.

    • Llamar ProcessReady () con un puerto designado para notificar a Amazon GameLiftservice cuando esté listo para organizar sesiones de juego.

    #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. Compile un proyecto de juego para los dos tipos de destino siguientes: Editor de desarrollo y Servidor de desarrollo.

    nota

    No es necesario volver a compilar la solución. En su lugar, compile solo el proyecto en la carpeta Games que coincida con el nombre de la aplicación. De lo contrario, Visual Studio volverá a compilar todo el proyecto de UE5, algo que puede tardar hasta una hora.

  6. Una vez finalizadas ambas compilaciones, cierre Visual Studio y abra el archivo .uproject del proyecto para abrirlo en el editor de Unreal.

  7. En el editor de Unreal, empaquete la compilación del servidor de juegos. Para elegir un objetivo, ve a Plataformas, Windows y selecciona our-application-name Servidor Y.

  8. Para iniciar el proceso de compilación de la aplicación de servidor, diríjase a Plataformas, Windows y seleccione Proyecto de paquetes. Cuando se complete la compilación, debería tener un archivo ejecutable. En el caso de nuestro ejemplo, el nombre del archivo es GameLiftUnrealAppServer.exe.

  9. Al compilar una aplicación de servidor en el editor de Unreal, se generan dos archivos ejecutables. Uno de ellos se encuentra en la raíz de la carpeta de compilación del juego y actúa como contenedor del archivo ejecutable del servidor propiamente dicho.

    Al crear una GameLift flota de Amazon con tu versión de servidor, te recomendamos que introduzcas el ejecutable del servidor real como ruta de inicio de la configuración en tiempo de ejecución. Por ejemplo, en la carpeta de compilación del juego, puede que tenga un archivo GameLiftFPS.exe en la raíz y otro en \GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe. Al crear una flota, le recomendamos que la utilice C:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe como ruta de lanzamiento de la configuración del tiempo de ejecución.

  10. Asegúrate de abrir los puertos UDP necesarios en la GameLift flota de Amazon para que el servidor del juego pueda comunicarse con los clientes del juego. De forma predeterminada, Unreal Engine utiliza el puerto 7777. Para obtener más información, consulta UpdateFleetPortSettingsla guía de referencia de la API de Amazon GameLift Service.

  11. Cree un archivo install.bat para la compilación del juego. Este script de instalación se ejecuta cada vez que la versión del juego se despliega en una GameLift flota de Amazon. A continuación, se muestra un archivo install.bat de ejemplo:

    VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q

    En algunas versiones de Unreal Engine, install.bat debería ser

    VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
    nota

    La ruta del archivo al archivo <>PrereqSetup_x64.exe es Engine\Extras\Redist\en-us.

  12. Ahora puedes empaquetar y subir la versión de tu juego a Amazon GameLift.

    La versión de OpenSSL que empaques con la compilación del juego debe coincidir con la versión que usó el motor del juego al crear el servidor del juego. Asegúrese de empaquetar la versión de OpenSSL correcta con la compilación del servidor de juegos. Para el SO Windows, el formato de OpenSSL es .dll.

    nota

    Package las DLL de OpenSSL en la versión de su servidor de juegos. Asegúrate de empaquetar la misma versión de OpenSSL que usaste al crear el servidor del juego.

    • libssl-1_1-x64.dll

      libcrypto-1_1-x64.dll

    Package sus dependencias junto con el ejecutable de su servidor de juegos en la raíz de un archivo zip. Por ejemplo, los DLL openssl-lib deberían estar en el mismo directorio que el archivo .exe.

Siguientes pasos

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 sobre cómo añadir Amazon GameLift a tu juego, consulta lo siguiente:

Para obtener instrucciones sobre cómo probar el juego, consulte Configura las pruebas locales con Amazon GameLift Anywhere .