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.
Integrar AmazonGameLiften un proyecto de Unreal Engine
En este tema se explica cómo configurar elAmazonGameLiftComplemento SDK de servidor C++ para Unreal Enginee intégralo en tus proyectos de juego.
Recursos adicionales:
Requisitos previos
Antes de continuar, asegúrese de haber revisado los siguientes requisitos previos:
Requisitos previos
-
Un ordenador capaz de ejecutar Unreal Engine. Para obtener más información sobre los requisitos de Unreal Engine, consulte Unreal EngineEspecificaciones de hardware y software
documentación. -
Microsoft Visual Studio 2019 o una versión más reciente.
-
CMake versión 3.1 o posterior.
Python versión 3.6 o posterior.
-
Un cliente de Git disponible en PATH.
-
Una cuenta de Epic Games. Regístrese para obtener una cuenta en el sitio oficialUnreal Enginesitio web.
-
UNGitHubcuenta asociada a tu cuenta de Unreal Engine. Para obtener más información, consulteAcceder al código fuente de Unreal Engine enGitHub
en el sitio web de Unreal Engine.
nota
AmazonGameLiftactualmente es compatible con las siguientes versiones de Unreal Engine:
-
4.22
-
4.23
-
4.24
-
4.25
-
4.26
-
4.27
-
5.1.0
-
5.1.1
Construye Unreal Engine a partir de la fuente
Las versiones estándar del editor de Unreal Engine, descargadas a través del lanzador de Epic, solo permiten crear aplicaciones cliente de Unreal. Para crear una aplicación de servidor de Unreal Engine, debes descargar y compilar Unreal Engine desde el código fuente, utilizando el repositorio de Github de Unreal Engine. Para obtener más información, consulteConstruyendo Unreal Engine a partir de la fuente
nota
Si aún no lo has hecho, sigue las instrucciones deAcceder al código fuente de Unreal Engine enGitHub
Para clonar la fuente de Unreal Engine en tu entorno de desarrollo
-
Clona la fuente de Unreal Engine en tu entorno de desarrollo en la rama que elijas.
git clone https://github.com/EpicGames/UnrealEngine.git
-
Consulta la etiqueta de la versión que estás usando para desarrollar tu 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
-
Navegue hasta la carpeta raíz del repositorio local. Cuando estés en la carpeta raíz, ejecuta el siguiente archivo:
Setup.bat
. -
Mientras estés en la carpeta raíz, ejecuta también el archivo:
GenerateProjectFiles.bat
. -
Tras ejecutar los archivos de los pasos anteriores, un archivo de solución de Unreal Engine,
UE5.sln
, se crea. AbrirEstudio visual, y en el editor de Visual Studio, abraUE5.sln
archivo. -
En Visual Studio, abra elVermenú y elige elExplorador de solucionesopción. Esto abre el menú contextual del nodo del proyecto Unreal. En elExplorador de solucionesventana, haga clic con el botón derecho en
UE5.sln
archivo (se puede enumerar como soloUE5
) y, a continuación, elijaConstruirpara crear el proyecto Unreal con el objetivo Win64 del Editor de Desarrollo.nota
La construcción puede tardar más de una hora en completarse.
Una vez finalizada la compilación, estará listo para abrir el Unreal Development Editor y crear o importar un proyecto.
Configura tu proyecto de Unreal para el complemento
Sigue estos pasos para obtener el AmazonGameLiftcomplemento SDK de servidor para Unreal Engine listo para tus proyectos de servidor de juegos.
Para configurar tu proyecto para el complemento
-
Con Visual Studio abierto, navegue hastaExplorador de solucionespanel y seleccione el
UE5
archivo para abrir el menú contextual del proyecto Unreal. En el menú contextual, seleccionaEstablecer como proyecto inicialopción. -
En la parte superior de la ventana de Visual Studio, elijaComience a depurar(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 Unreal Editor, consulteInterfaz de editor irreal
en el sitio web de documentación de Unreal Engine. -
Cierre la ventana de Visual Studio que abrió, ya que el Editor de Unreal abre otra ventana de Visual Studio que contiene el proyecto de Unreal y su proyecto de juego.
-
En el editor de Unreal, realice una de las siguientes acciones:
Elige un proyecto de Unreal existente que quieras integrar con AmazonGameLift.
-
Crear un nuevo proyecto. Para experimentar con la AmazoníaGameLiftcomplemento para Unreal, intenta usar el motor de UnrealTercera personaplantilla. Para obtener más información sobre esta plantilla, consultePlantilla en tercera persona
en el sitio web de documentación de Unreal Engine. También puede configurar un nuevo proyecto con los siguientes ajustes:
C++
Con contenido inicial
Escritorio
El nombre de un proyecto. En los ejemplos de este tema, denominamos nuestro proyecto
GameLiftUnrealApp
.
En Visual StudioExplorador de soluciones, navega hasta la ubicación de tu proyecto de Unreal. En lo irreal
Source
carpeta, busque un archivo llamado
.Your-application-name
.Target.csPor ejemplo:
GameLiftUnrealApp.Target.cs
.Haga una copia de este archivo y asigne un nombre a la copia:
.Your-application-name
Server.Target.csAbra el archivo nuevo y realice los siguientes cambios:
Cambia el
class
yconstructor
para que coincida con el nombre del archivo.Cambia el
Type
deTargetType.Game
aTargetType.Server
.El archivo final tendrá un aspecto similar al siguiente ejemplo:
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 ya está configurado para aceptar AmazonGameLiftcomplemento SDK de servidor.
La siguiente tarea consiste en crear las bibliotecas SDK del servidor C++ para Unreal para que puedas importarlas a tu proyecto.
Para crear las bibliotecas SDK de servidores de C++ para Unreal
-
Descarga elAmazonGameLiftComplemento SDK de servidor C++ para Unreal
. nota
Si se coloca el SDK en el directorio de descarga predeterminado, se puede producir 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 mueva 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, consulta GithubCompilación e instalación de OpenSSL
documentación. Para obtener más información, lea el OpenSSLNotas para plataformas Windows
documentación. nota
La AmazoníaGameLiftLa versión principal de OpenSSL de la instancia EC2 debe coincidir con la versión principal de OpenSSL que descargue y utilice para crear el SDK.
-
Con las bibliotecas descargadas, cree las bibliotecas del SDK del servidor C++ para Unreal Engine.
En el
GameLift-Cpp-ServerSDK-
directorio del SDK descargado, compile con<version>
-DBUILD_FOR_UNREAL=1
parametriza y crea el SDK del servidor. Los siguientes ejemplos muestran cómo compilar usandocmake
.Ejecuta los siguientes comandos en tu 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
out\gamelift-server-sdk\Release
carpeta:-
out\prefix\bin\aws-cpp-sdk-gamelift-server.dll
-
out\prefix\lib\aws-cpp-sdk-gamelift-server.lib
Copie los dos archivos de la biblioteca en
ThirdParty\GameLiftServerSDK\Win64
carpeta en AmazonGameLiftPaquete de complementos de Unreal Engine. -
Utilice el siguiente procedimiento para importar el AmazonGameLiftcomplemento a tu proyecto de ejemplo.
Importa el AmazonasGameLiftplugin
-
Añada el AmazonasGameLiftcomplemento SDK de servidor para el juego
.uproject
archivo.En el ejemplo, la aplicación se llama
GameLiftUnrealApp
, por lo que el archivo seráGameLiftUnrealApp.uproject
. -
Edite el
.uproject
archivo para añadir el complemento a tu proyecto de juego."Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
Asegúrate de que el juego seaModuleRulesdepende del complemento. Abra el
.Build.cs
archivar y añadir el AmazonasGameLiftServerDependencia del SDK. Este 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ñadir
"GameLiftServerSDK"
al final de la lista dePublicDependencyModuleNames
.public class GameLiftUnrealApp : ModuleRules { public GameLiftUnrealApp(TargetInfo Target) { PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }); bEnableExceptions = true; } }
El complemento ahora debería funcionar para su aplicación. Continúe con la siguiente sección para integrar AmazonGameLiftfuncionalidad en tu juego.
Añadir AmazonGameLiftcódigo de servidor para tu proyecto de Unreal
Has configurado y configurado tu entorno de Unreal Engine y ahora puedes integrar un servidor de juegos con AmazonGameLift. El código que se presenta en este tema realiza las llamadas obligatorias a Amazon.GameLiftservicio. También implementa un conjunto de funciones de devolución de llamadas que responden a las solicitudes de Amazon.GameLiftservicio. Para obtener más información sobre cada función y lo que hace el código, consulteInicializar el proceso del servidor. Para obtener más información sobre las acciones y los tipos de datos del SDK que se utilizan en este código, leeReferencia GameLift del SDK del servidor de Amazon para Unreal Engine.
Para inicializar un servidor de juegos con AmazonGameLift, utilice el procedimiento siguiente.
nota
La AmazoníaGameLift-el código específico que se proporciona en la siguiente sección depende del uso de unWITH_GAMELIFT
indicador de preprocesador. Este indicador solo es válido cuando se cumplen estas dos condiciones:
-
Target.Type == TargetRules.TargetType.Server
-
Los complementos encontraron el AmazonGameLiftbinarios del SDK del servidor.
Esto garantiza que solo las compilaciones de Unreal Server invoquen a AmazonGameLiftla API de backend. También te permite escribir código que se ejecute correctamente para todos los diferentes objetivos de Unreal que pueda producir tu juego.
Integra un servidor de juegos con AmazonGameLift
-
En Visual Studio, abra el
.sln
archivo para su solicitud. Para nuestro ejemplo, el archivoGameLiftUnrealApp.sln
se encuentra en la carpeta raíz. -
Con la solución abierta, localice la de su aplicación
archivo. 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«con su propio nombre de 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 fuente relacionado
archivo. En nuestro ejemplo:Your-application-name
GameMode.cppGameLiftUnrealAppGameMode.cpp
. y cambie el código para alinearlo con el siguiente código de ejemplo. Asegúrese de reemplazar»GameLiftUnrealApp«con su propio nombre de aplicación.Este ejemplo muestra cómo añadir todos los elementos necesarios para la integración con Amazon.GameLift, tal como se describe enAñadir AmazonGameLifta tu servidor de juegos. Esto incluye:
-
Inicializar un AmazonGameLiftCliente de API.
-
Implementación de funciones de devolución de llamadas para responder a las solicitudes de AmazonGameLiftservicio, que incluye
OnStartGameSession
,OnProcessTerminate
, yonHealthCheck
. -
LlamandoProcessReady() con un puerto designado para notificar a AmazonGameLiftservicecuando 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); }
-
-
Crea un proyecto de juego para los dos tipos de objetivos siguientes:Editor de desarrolloyServidor de desarrollo.
nota
No necesita reconstruir la solución. En su lugar, cree solo el proyecto bajo el
Games
carpeta que coincide con el nombre de tu aplicación. De lo contrario, Visual Studio reconstruye todo el proyecto UE5, lo que puede tardar hasta una hora. -
Una vez finalizadas ambas compilaciones, cierre Visual Studio y abra la de su proyecto
.uproject
archivo para abrirlo en el Unreal Editor. -
En Unreal Editor, empaqueta la versión de servidor de tu juego. Para elegir un objetivo, vaya aPlataformas,escaparatesy selecciona
Your-application-nameServidor
. -
Para iniciar el proceso de creación de la aplicación de servidor, vaya aPlataformas,escaparatesy seleccionaProyecto de paquete. Cuando la compilación esté completa, deberías tener un ejecutable. En el caso de nuestro ejemplo, el nombre del archivo es
GameLiftUnrealAppServer.exe
. -
La creación de una aplicación de servidor en Unreal Editor produce dos ejecutables. Uno se encuentra en la raíz de la carpeta de compilación del juego y actúa como contenedor del ejecutable real del servidor.
Al crear un AmazonGameLiftflote con la compilación de su servidor, le recomendamos que introduzca el ejecutable real del servidor como ruta de inicio de la configuración en tiempo de ejecución. Por ejemplo, en la carpeta de creación de tu juego, es posible que tengas un
GameLiftFPS.exe
archivo en la raíz y otro en\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
. Al crear una flota, le recomendamos que 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 AmazonGameLiftflota, para que el servidor del juego pueda comunicarse con los clientes del juego. De forma predeterminada, Unreal Engine usa el puerto
7777
. Para obtener más información, consulteUpdateFleetPortSettingsen la AmazoníaGameLiftguía de referencia de la API de servicio. -
Crea un
archivo para la compilación de tu juego. Este script de instalación se ejecuta cada vez que la compilación del juego se implementa en AmazonGameLiftflota. He aquí un ejemploinstall.bat
install.bat
archivo:VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q
nota
La ruta del archivo al
UE5PrereqSetup_x64.exe
el archivo esEngine\Extras\Redist\en-us
. -
Ahora puedes empaquetar y subir la versión de tu juego a AmazonGameLift.
La versión de OpenSSL que utilices para la compilación debe coincidir con la versión utilizada por el servidor del juego. Asegúrate de incluir la versión correcta de OpenSSL con la versión del servidor del juego. Para el sistema operativo Windows, el formato OpenSSL es
.dll
.nota
Empaquete los archivos DLL de OpenSSL en la versión de su servidor de juegos. Asegúrate de usar las DLL para la misma versión que usaste al crear el servidor del juego.
-
libssl-3-x64.dll
-
libcrypto-3-x64.dll
Empaqueta tus dependencias junto con el ejecutable de tu servidor de juegos en la raíz de un archivo zip. Por ejemplo,
openssl-lib
Los dlls deben estar en el mismo directorio que.exe
archivo. -
Pasos siguientes
Has configurado y configurado tu entorno de Unreal Engine y ya puedes empezar a integrar AmazonGameLiften tu juego.
Para obtener más información sobre cómo añadir AmazonGameLiftpara tu juego, consulta lo siguiente:
Para obtener instrucciones sobre cómo probar el juego, consultaPruebe su integración con las GameLift Anywhere flotas de Amazon .