Integración de Amazon GameLift en un proyecto de Unity - 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.

Integración de Amazon GameLift en un proyecto de Unity

En este tema se explica cómo configurar el complemento del SDK del servidor C# de Amazon GameLift para Unity e integrarlo en los proyectos de juegos.

Recursos adicionales:

Requisitos previos

Para utilizar el complemento del SDK del servidor C# de Amazon GameLift para Unity, son necesarios los siguientes componentes:

  • Un entorno de desarrollo y una versión del editor Unity compatibles con el complemento (consulte Soporte de desarrollo con Amazon GameLift). Para obtener información sobre las versiones de Unity, consulte Requisitos del sistema para Unity en la documentación de Unity.

  • El complemento del SDK del servidor de Amazon GameLift para el paquete Unity. Este paquete incluye el SDK del servidor 5+ para C#. Puede descargar el paquete desde este sitio: Introducción a Amazon GameLift.

  • El registro de terceros se centró en UnityNuget. Esta herramienta administra archivos DLL de terceros. Para obtener más información, consulte el repositorio de Github UnityNyGet.

Configuración de UnityNuget

Si no tiene UnityNuget configurado para su proyecto de juego, siga los pasos que figuran a continuación para instalar la herramienta mediante el administrador de paquetes de Unity. También puede utilizar la CLI de NuGet para descargar manualmente los DLL. Para obtener más información, consulte el SDK del servidor C# de Amazon GameLift para el archivo README de Unity.

Para integrar UnityNuGet en el proyecto de juego Unity, realice el siguiente procedimiento:
  1. Con el proyecto abierto en el editor de Unity, vaya al menú principal y seleccione Editar, Configuración del proyecto. Entre las opciones, elija la sección Administrador de paquetes y abra el grupo Registros con ámbito.

  2. Pulse el botón + e introduzca los siguientes valores para el registro con ámbito de UnityNuget:

    Name: Unity NuGet URL: https://unitynuget-registry.azurewebsites.net Scope(s): org.nuget
  3. Para los usuarios de la versión Unity 2021:

    Después de configurar UnityNuget, compruebe si aparecen errores de Assembly Version Validation en la consola de Unity. Estos errores se producen si las redirecciones de enlace para ensamblados con nombres seguros en los paquetes NuGet no se resuelven correctamente en las rutas del proyecto de Unity. Para resolver este problema, configure la validación de la versión de ensamblaje de Unity:

    1. En el editor de Unity, diríjase al menú principal y seleccione Editar, Configuración del proyecto y abra la sección Jugador.

    2. Cancele la selección de la opción Validación de la versión de ensamblaje.

Instalación del complemento

Utilice el siguiente procedimiento para instalar el complemento del SDK del servidor C# de Amazon GameLift para Unity y configurar el registro de log4net.

Para instalar el complemento
  1. Con el proyecto abierto en el editor de Unity, diríjase al menú principal y seleccione Ventana, Administrador de paquetes.

  2. Elija el botón + para añadir un paquete nuevo. Seleccione la opción Añadir paquete desde archivo tarball.

  3. En Seleccionar paquetes en disco busque el complemento del SDK del servidor C# de Amazon GameLift para los archivos de descarga de Unity y seleccione el archivo .tgz del SDK del servidor de Amazon GameLift. Elija Abrir para instalar el complemento.

El SDK del servidor de Amazon GameLift utiliza el marco log4net para generar mensajes de registro. Está configurado para enviar mensajes a la terminal de una compilación de servidor de forma predeterminada, pero Unity requiere una configuración para añadir compatibilidad con el registro de archivos. Puede añadir compatibilidad a su proyecto importando la muestra proporcionada dentro del paquete del SDK del servidor de Amazon GameLift. Utilice el siguiente procedimiento para añadir la muestra y configurar log4net:

Para configurar log4net para la salida de archivos, realice el siguiente procedimiento:
  1. Con el proyecto abierto en el editor de Unity, diríjase al menú principal y seleccione Ventana, Administrador de paquetes.

  2. En el menú desplegable, seleccione Paquetes: en proyecto y, a continuación, seleccione el SDK del servidor de Amazon GameLift en la lista de paquetes. Se abrirán los detalles del paquete.

  3. En los detalles del paquete, seleccione la opción Grupo de muestras y pulse Importar.

  4. El archivo log4net.config y el script de LoggingConfiguration.cs que lo acompaña ejecutan automáticamente la configuración, que ahora está configurada en la carpeta Assets/Samples del proyecto.

    nota

    Si necesita mover el archivo log4net.config a una carpeta diferente del proyecto, también debe actualizar la ruta del archivo de configuración en el script LoggingConfiguration.cs con la nueva ruta. Para obtener más información, consulte el Manual de log4net sobre la configuración de log4net.

Para obtener instrucciones más detalladas y una guía de prueba, consulte el archivo README que se encuentra en la descarga del complemento.

Configuración una flota de Amazon GameLift Anywhere para realizar pruebas

Puede configurar su estación de trabajo de desarrollo como una flota de alojamiento de Amazon GameLift Anywhere para probar de forma iterativa su integración con Amazon GameLift. Con esta configuración, puede iniciar los procesos del servidor de juegos en su estación de trabajo, enviar solicitudes de unión o emparejamiento de jugadores a Amazon GameLift para iniciar sesiones de juego y conectar clientes a las nuevas sesiones de juego. Con su propia estación de trabajo configurada como servidor de alojamiento, podrá supervisar todos los aspectos de la integración de sus juegos con Amazon GameLift.

Para obtener instrucciones sobre cómo configurar su estación de trabajo, consulte Realización de una prueba de integración con flotas de Amazon GameLift Anywhere para completar los siguientes pasos:

  1. Cree una ubicación personalizada para su estación de trabajo.

  2. Cree una flota de Amazon GameLift Anywhere con su nueva ubicación personalizada. Si se realiza correctamente, esta solicitud devuelve un ID de la flota. Tome nota de ese valor, ya que lo necesitará más tarde.

  3. Registre su estación de trabajo como un recurso informático en la nueva flota de Anywhere . Proporcione un nombre de procesamiento único y especifique la dirección IP de su estación de trabajo. Si se realiza correctamente, esta solicitud devuelve un punto de conexión del SDK del servicio en forma de URL de WebSocket. Tome nota de ese valor, ya que lo necesitará más tarde.

  4. Genere un token de autenticación para el procesamiento de su estación de trabajo. Esta autenticación de corta duración incluye el token y una fecha de caducidad. El servidor de juegos lo usa para autenticar la comunicación con el servicio de Amazon GameLift. Guarde la autenticación en el recurso informático de su estación de trabajo para que los procesos del servidor de juegos en ejecución puedan acceder a él.

Añada el código del servidor de Amazon GameLift a su proyecto de Unity

El servidor de juegos se comunica con el servicio de Amazon GameLift para recibir instrucciones e informar sobre su estado actual. Para ello, debe añadir un código de servidor de juegos que utilice el SDK del servidor de Amazon GameLift.

El ejemplo de código proporcionado muestra los elementos básicos de integración necesarios. Utiliza MonoBehavior para mostrar una inicialización sencilla de un servidor de juegos con Amazon GameLift. En el ejemplo se supone que el servidor de juegos se ejecuta en una flota de Amazon GameLift Anywhere para realizar pruebas. Incluye código para lo siguiente:

  • Inicializar un cliente de la API de Amazon GameLift. En el ejemplo, se utiliza la versión de InitSDK() con parámetros de servidor para el recurso informático y la flota de Anywhere. Utilice la URL de WebSocket, el ID de la flota, el nombre de computación (ID de host) y el token de autenticación, tal como se definió en el tema anterior Configuración una flota de Amazon GameLift Anywhere para realizar pruebas.

  • Implemente funciones de devolución de llamadas para responder a las solicitudes del servicio de Amazon GameLift, incluidas OnStartGameSession, OnProcessTerminate y onHealthCheck.

  • Llame a ProcessReady() con un puerto designado para informar al servicio Amazon GameLift cuando el proceso esté listo para alojar sesiones de juego.

El código que se presenta en este tema establece la comunicación con el servicio de Amazon GameLift. También implementa un conjunto de funciones de devolución de llamada que responden a las solicitudes. 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 C#.

En este ejemplo se muestra cómo añadir todos los elementos necesarios, tal y como se describe en Adición de Amazon GameLift al servidor de juegos. Incluye:

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

using System.Collections.Generic; using Aws.GameLift.Server; using UnityEngine; public class ServerSDKManualTest : MonoBehaviour { //This example is a simple integration that initializes a game server process //that is running on an Amazon GameLift Anywhere fleet. void Start() { //Identify port number (hard coded here for simplicity) the game server is listening on for player connections var listeningPort = 7777; //WebSocketUrl from RegisterHost call var webSocketUrl = "wss://us-west-2.api.amazongamelift.com"; //Unique identifier for this process var processId = "myProcess"; //Unique identifier for your host that this process belongs to var hostId = "myHost"; //Unique identifier for your fleet that this host belongs to var fleetId = "myFleet"; //Authorization token for this host process var authToken = "myAuthToken"; //Server parameters are required for a GameLift Anywhere fleet. //They are not required for a GameLift managed EC2 fleet. ServerParameters serverParameters = new ServerParameters( webSocketUrl, processId, hostId, fleetId, authToken); //InitSDK establishes a local connection with an Amazon GameLift agent //to enable further communication. var initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters); if (initSDKOutcome.Success) { //Implement callback functions ProcessParameters processParameters = new ProcessParameters( //Implement OnStartGameSession callback (gameSession) => { //GameLift sends a game session activation request to the game server //with game session object containing 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(). GameLiftServerAPI.ActivateGameSession(); }, (updateGameSession) => { //GameLift sends a request when a game session is updated (such as for //FlexMatch backfill) with an updated game session object. //The game server can examine matchmakerData and handle new incoming players. //updateReason explains the purpose of the update. }, () => { //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. GameLiftServerAPI.ProcessEnding(); }, () => { //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. return true; }, //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. listeningPort, new LogParameters(new List<string>() { //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. "/local/game/logs/myserver.log" })); //The game server calls ProcessReady() to tell GameLift it's ready to host game sessions. var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters); if (processReadyOutcome.Success) { print("ProcessReady success."); } else { print("ProcessReady failure : " + processReadyOutcome.Error.ToString()); } } else { print("InitSDK failure : " + initSDKOutcome.Error.ToString()); } } void OnApplicationQuit() { //Make sure to call GameLiftServerAPI.ProcessEnding() and GameLiftServerAPI.Destroy() before terminating the server process. //These actions notify Amazon GameLift that the process is terminating and frees the API client from memory. GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy(); if (processEndingOutcome.Success) { Environment.Exit(0); } else { Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString()); Environment.Exit(-1); } } }

Recursos adicionales

Utilice los siguientes recursos para probar el servidor de juegos y ampliar la funcionalidad: