En este tema se explica cómo configurar el complemento del SDK del servidor C++ de Amazon GameLift para Unreal Engine e integrarlo en los 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 cuenta de GitHub asociada a su cuenta de Unreal Engine. Para obtener más información, consulte Acceso al código fuente de Unreal Engine en GitHub
en el sitio web de Unreal Engine.
nota
Amazon GameLift admite actualmente 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/
nota
Si aún no lo ha hecho, siga las instrucciones que aparecen en Acceso al código fuente de Unreal Engine en GitHub
Clonación del código fuente de Unreal Engine en su entorno de desarrollo
-
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
-
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
-
Diríjase a la carpeta raíz del repositorio local. Cuando esté en la carpeta raíz, ejecute el siguiente archivo:
Setup.bat
. -
Mientras esté en la carpeta raíz, ejecute también el archivo:
GenerateProjectFiles.bat
. -
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 archivoUE5.sln
. -
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 comoUE5
) 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
Siga estos pasos para que el complemento del SDK del servidor de Amazon GameLift para Unreal Engine esté listo para proyectos del servidor de juegos.
Configuración de un proyecto para el complemento
-
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. -
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. -
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.
-
En el editor de Unreal, realice uno de los siguientes procedimientos:
Elija un proyecto de Unreal existente que desee integrar con Amazon GameLift.
-
Cree un nuevo proyecto de . Para experimentar con el complemento de Amazon GameLift para Unreal, intente usar la plantilla Tercera persona del motor de 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
.
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.csPor ejemplo:
GameLiftUnrealApp.Target.cs
.Realice una copia del archivo y asígnele el nombre
.Your-application-name
Server.Target.csAbra el archivo nuevo y realice los cambios siguientes:
Cambie los valores
class
yconstructor
para que coincidan con el nombre del archivo.Cambie el valor
Type
deTargetType.Game
aTargetType.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"); } }
Su proyecto ya está configurado para aceptar el complemento del SDK del servidor de Amazon GameLift.
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:
-
Descargue el complemento del SDK del servidor C++ de Amazon GameLift
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
. 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 utilice para crear el SDK del servidor de Amazon GameLift debe coincidir con la versión de OpenSSL utilizada por Unreal para empaquetar el servidor de juegos. Encontrará información sobre las versiones en el directorio de instalación de Unreal (
...Engine\Source\ThirdParty\OpenSSL
).-
Con las bibliotecas descargadas, cree las bibliotecas del SDK del servidor C++ para Unreal Engine.
En el directorio
GameLift-Cpp-ServerSDK-
del SDK descargado, realice la compilación con el parámetro<version>
-DBUILD_FOR_UNREAL=1
y compile el SDK del servidor. Los siguientes ejemplos muestran cómo realizar la compilación mediantecmake
.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
Copie los dos archivos de la biblioteca en la carpeta
ThirdParty\GameLiftServerSDK\Win64
del paquete de complementos de Unreal Engine de Amazon GameLift. -
Utilice el siguiente procedimiento para importar el complemento de Amazon GameLift en su proyecto de ejemplo.
Importación del complemento de Amazon GameLift
Busque la carpeta
GameLiftServerSDK
que extrajo del complemento en el procedimiento anterior.Busque los
Plugins
en la carpeta raíz del proyecto del juego (si la carpeta no existe, créela allí).Copie la carpeta
GameLiftServerSDK
en losPlugins
.Esto permitirá que el proyecto Unreal vea el complemento.
-
Añada el complemento SDK del servidor de Amazon GameLift al archivo
.uproject
del juego.En el ejemplo, la aplicación se llama
GameLiftUnrealApp
, por lo que el archivo seráGameLiftUnrealApp.uproject
-
Edite el archivo
.uproject
para añadir el complemento al proyecto de juego."Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
Asegúrese de que las ModuleRules del juego dependan del complemento. Abra el archivo
.Build.cs
y añada la dependencia del SDK del servidor de Amazon GameLift. 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
.Añada
"GameLiftServerSDK"
al final de la lista dePublicDependencyModuleNames
.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úe con la siguiente sección para integrar la funcionalidad de Amazon GameLift en el juego.
Añada el código del servidor de Amazon GameLift a su proyecto de Unreal
Ha configurado y establecido su entorno de Unreal Engine y ahora puede integrar un servidor de juegos con Amazon GameLift. El código que se presenta en este tema hace que las llamadas al servicio de Amazon GameLift sean obligatorias. También implementa un conjunto de funciones de devolución de llamada que responden a las solicitudes del servicio de Amazon GameLift. 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 empleados en este código, consulte SDK 5.x del servidor de Amazon GameLift para Unreal Engine: acciones.
Para inicializar un servidor de juegos con Amazon GameLift, utilice el siguiente procedimiento.
nota
El código específico de Amazon GameLift que se proporciona en la siguiente sección depende del uso de un indicador de preprocesador WITH_GAMELIFT
. Este indicador solo es válido cuando se cumplen estas dos condiciones:
-
Target.Type == TargetRules.TargetType.Server
-
Los complementos encontraron los archivos binarios del SDK del servidor de Amazon GameLift.
Esto garantiza que solo las compilaciones de Unreal Server invocarán la API de backend de Amazon GameLift. También le permitirá escribir código que se ejecutará correctamente para todos los destinos diferentes de Unreal que pueda producir el juego.
Integración del servidor de juegos con Amazon GameLift
-
En Visual Studio, abra el archivo
.sln
de su aplicación. En nuestro ejemplo, el archivoGameLiftUnrealApp.sln
se encuentra en la carpeta raíz. -
Con la solución abierta, localice el archivo
de su aplicación. Ejemplo:Your-application-name
GameMode.hGameLiftUnrealAppGameMode.h
. -
Cambie el archivo de encabezado para alinearlo con el siguiente código de ejemplo. Asegúrese de reemplazar «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(); };
-
Abra el archivo
del archivo de origen relacionado. En nuestro ejemplo:Your-application-name
GameMode.cppGameLiftUnrealAppGameMode.cpp
, y cambie el código para que se alinee con el siguiente código de ejemplo. Asegúrese de reemplazar «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 Adición de Amazon GameLift al servidor de juegos. Esto incluye:
-
Inicialización de un cliente de la API de Amazon GameLift.
-
Implementación de funciones de devolución de llamadas para responder a las solicitudes del servicio de Amazon GameLift, incluidas
OnStartGameSession
,OnProcessTerminate
yonHealthCheck
. -
Llamada a ProcessReady() con un puerto designado para informar al servicio de Amazon GameLift cuando el proceso esté listo para alojar 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); }
-
-
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. -
Una vez finalizadas ambas compilaciones, cierre Visual Studio y abra el archivo
.uproject
del proyecto para abrirlo en el editor de Unreal. -
En el editor de Unreal, empaquete la compilación del servidor de juegos. Para elegir un destino, diríjase a Plataformas, Windows y seleccione
Your-application-nameServer
. -
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
. -
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 flota de Amazon GameLift con la compilación de su servidor, le recomendamos que introduzca el archivo ejecutable del servidor en cuestión como ruta de lanzamiento de la configuración del 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 utiliceC:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
como ruta de lanzamiento de la configuración del tiempo de ejecución. -
Asegúrese de abrir los puertos UDP necesarios en la flota de Amazon GameLift para que el servidor de juegos pueda comunicarse con los clientes de juego. De forma predeterminada, Unreal Engine utiliza el puerto
7777
. Para obtener más información, consulte UpdateFleetPortSettings en la Guía de referencia de la API del servicio de Amazon GameLift. -
Cree un archivo
para la compilación del juego. Este script de instalación se ejecuta siempre que la compilación del juego se implementa en una flota de Amazon GameLift. A continuación, se muestra un archivoinstall.bat
install.bat
de ejemplo:VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q
Para algunas versiones de Unreal Engine, el
install.bat
debería ser lo siguiente:VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
nota
La ruta del archivo al archivo
<>PrereqSetup_x64.exe
esEngine\Extras\Redist\en-us
. -
Ahora puede empaquetar y cargar la compilación del juego en Amazon GameLift.
La versión de OpenSSL empaquetada con la compilación del juego debe coincidir con la versión utilizada por el motor del juego a la hora de compilar el servidor de juegos. 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
Empaquete los DLL de OpenSSL en la compilación del servidor de juegos. Debe empaquetar la misma versión de OpenSSL que haya usado al compilar el servidor de juegos.
-
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
Empaquete las dependencias junto con el archivo ejecutable del 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
Ha configurado y establecido su entorno de Unreal Engine y ahora puede iniciar la integración de Amazon GameLift en su juego.
Para obtener más información sobre la adición de Amazon GameLift a su juego, consulte las siguientes seccione:
Para obtener instrucciones sobre cómo probar el juego, consulte Configuración de pruebas locales con Amazon GameLift Anywhere .