Complemento para Unity: implementación de un juego en flotas de EC2 administradas
En este flujo de trabajo, utilizará el complemento a fin de preparar el juego para el alojamiento en recursos de computación basados en la nube que están administrados por Amazon GameLift. Usted añade el código de juego de cliente y servidor para la funcionalidad de Amazon GameLift y, a continuación, carga la compilación del servidor en el servicio de Amazon GameLift para el alojamiento. Cuando complete este flujo de trabajo, tendrá servidores de juego ejecutándose en la nube y un cliente de juegos funcional que se pueda conectar a ellos.
Para iniciar el flujo de trabajo de Amazon EC2 administrado de Amazon GameLift, realice el siguiente procedimiento:
En el menú principal del editor de Unity, elija Amazon GameLift y seleccione Host with Managed EC2. Este flujo de trabajo presenta un proceso de seis pasos para integrar, compilar, implementar y lanzar los componentes del juego.
Configuración del perfil
Elija el perfil que desee utilizar al seguir este flujo de trabajo. El perfil que seleccione afectará a todos los pasos del flujo de trabajo. Todos los recursos que cree estarán asociados a la cuenta de AWS del perfil y se colocarán en la región de AWS predeterminada del perfil. Los permisos del usuario del perfil determinan su acceso a los recursos y acciones de AWS.
-
Seleccione un perfil de la lista desplegable de perfiles disponibles. Si aún no tiene un perfil o quiere crear uno nuevo, vaya al menú de Amazon GameLift y seleccione Set AWS Account Profiles.
-
Si el estado del arranque no es “Activo”, seleccione Perfil de arranque y espere a que el estado cambie a “Activo”.
Integración del juego con Amazon GameLift
Para esta tarea, debe actualizar el código del cliente y del servidor en el proyecto del juego.
-
Los servidores de juegos deben poder comunicarse con el servicio de Amazon GameLift a fin de recibir peticiones de inicio de sesión de juego, proporcionar datos de conexión de la sesión de juego e informar sobre el estado.
-
Los clientes del juego deben poder obtener información sobre las sesiones de juego, iniciar una sesión o unirse a ella y obtener datos de conexión para entrar en una partida.
nota
Si ha importado el juego de ejemplo, puede omitir este paso. Los activos del juego de ejemplo ya tienen el código de servidor y cliente necesario.
Integración del código del servidor
Si emplea su propio proyecto de juego con escenas personalizadas, utilice el código de ejemplo proporcionado para añadir el código de servidor necesario al proyecto del juego. Si integró el proyecto del juego para probarlo con una flota de Anywhere, ya ha completado las instrucciones de este paso.
-
En los archivos del proyecto del juego, abra la carpeta
Assets/Scripts/Server
. Si el archivo no existe, créelo. -
Vaya al repositorio de GitHub aws/amazon-gamelift-plugin-unity
y abra la ruta Samples~/SampleGame/Assets/Scripts/Server
. -
Busque el archivo
GameLiftServer.cs
y cópielo en la carpetaServer
del proyecto del juego. Cuando compile un ejecutable de servidor, use este archivo como destino de la compilación.
El código de ejemplo incluye, como mínimo, estos elementos obligatorios, que utilizan el SDK del servidor de Amazon GameLift para C# (versión 5):
-
La inicialización un cliente de la API de Amazon GameLift. La llamada a InitSDK() con los parámetros del servidor es obligatoria para una flota de Amazon GameLift Anywhere. Estos ajustes se configuran automáticamente para el uso en el complemento.
-
La implementación de las funciones de devolución de llamada necesarias para responder a las solicitudes del servicio de Amazon GameLift, como
OnStartGameSession
,OnProcessTerminate
yonHealthCheck
. -
Llamadas a
ProcessReady()
con un puerto designado para informar al servicio de Amazon GameLift cuando el proceso del servidor esté listo para alojar sesiones de juego.
Si desea personalizar el código de servidor de ejemplo, consulte estos recursos:
Integración del código del cliente
Para los clientes de juego que se conectan a servidores de juego basados en la nube, es una práctica recomendada utilizar un servicio de backend en el cliente para hacer llamadas al servicio de Amazon GameLift, en lugar de hacer las llamadas directamente desde el cliente del juego.
En el flujo de trabajo del complemento para el alojamiento en una flota de EC2 administrada, cada escenario de implementación incluye un servicio de backend preconfigurado con los siguientes componentes:
-
Un conjunto de funciones de Lambda y tablas de DynamoDB que se utilizan para solicitar sesiones de juego y recuperar información sobre las sesiones de juego. Estos componentes utilizan una API Gateway como proxy.
-
Un grupo de usuarios de Amazon Cognito que genera identificadores de jugador únicos y autentica las conexiones de los jugadores.
Para usar estos componentes, el cliente del juego necesita una funcionalidad que le permita enviar solicitudes al servicio de backend para hacer lo siguiente:
-
Crear un usuario jugador en el grupo de usuarios de AWS Cognito y autenticarse.
-
Unirse a una sesión de juego y recibir información de conexión.
-
Unirse a un juego mediante el emparejamiento.
Utilice los siguientes recursos como guía.
-
Integre el cliente con la clase GameLiftCoreApi
en el repositorio aws/amazon-gamelift-plugin-unity de GitHub. Esta clase proporciona controles para la autenticación de los jugadores y para recuperar información de la sesión de juego. -
Para ver ejemplos de integraciones de juegos, vaya al repositorio de GitHub aws/amazon-gamelift-plugin-unity
, Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs
.
Selección del escenario de implementación
En este paso, tendrá que elegir la solución de alojamiento de juegos que desee implementar en ese momento. Puede disponer de varias implementaciones del juego mediante cualquiera de los escenarios.
Flota de una sola región: permite implementar el servidor de juegos en una sola flota de recursos de alojamiento en la región de AWS predeterminada del perfil activo. Este escenario es un buen punto de partida para probar la integración del servidor con AWS y la configuración de compilación del servidor. Permite implementar los siguientes recursos:
La flota de AWS (bajo demanda) con la compilación del servidor de juegos instalada y en ejecución.
Grupo de usuarios y cliente de Amazon Cognito para permitir a los jugadores autenticarse e iniciar un juego.
Autorizador de la puerta de enlace de API que vincula el grupo de usuarios con las API.
WebACI para limitar las llamadas excesivas de los jugadores a la puerta de enlace de la API.
Puerta de enlace de la API + función de Lambda para que los jugadores soliciten una ranura de juego. Esta función llama a
CreateGameSession()
si no hay ninguna disponible.Puerta de enlace de la API + función de Lambda para que los jugadores obtengan información de la conexión para su solicitud de juego.
Flota de FlexMatch: implementa el servidor de juegos en un conjunto de flotas y configura un emparejador de FlexMatch con reglas para crear emparejamiento de jugadores. En este escenario, se utiliza un alojamiento de spot de bajo costo con una estructura multiflota y multiubicación para garantizar la disponibilidad. Este método resultará útil cuando esté listo para empezar a diseñar un componente del emparejador para la solución de alojamiento. En este escenario, se crearán los recursos básicos para esta solución, que podrá personalizar después según sea necesario. Permite implementar los siguientes recursos:
Configuración de emparejamiento de FlexMatch y reglas de emparejamiento establecidas para aceptar las solicitudes de los jugadores y formar emparejamientos.
-
Tres flotas de AWS con la compilación del servidor de juegos instalada y en ejecución en varios lugares. Incluye dos flotas de spot y una flota bajo demanda como respaldo.
-
Cola de ubicación de sesión de juego de AWS que responde a las solicitudes de emparejamientos propuestos mediante la búsqueda del mejor recurso de alojamiento posible (en función de la viabilidad, el costo, la latencia de los jugadores, etc.) y el inicio de una sesión de juego.
-
Grupo de usuarios y cliente de Amazon Cognito para permitir a los jugadores autenticarse e iniciar un juego.
-
Autorizador de la puerta de enlace de API que vincula el grupo de usuarios con las API.
-
WebACI para limitar las llamadas excesivas de los jugadores a la puerta de enlace de la API.
-
Puerta de enlace de la API + función de Lambda para que los jugadores soliciten una ranura de juego. Esta función llama a
StartMatchmaking()
. -
Puerta de enlace de la API + función de Lambda para que los jugadores obtengan información de la conexión para su solicitud de juego.
-
Tablas de Amazon DynamoDB para almacenar tickets de emparejamiento para jugadores e información sobre las sesiones de juego.
-
Tema de SNS + función de Lambda para administrar los eventos de GamessionQueue.
Parámetros del juego
En este paso, deberá describir el juego que quiera subir a AWS.
-
Nombre del juego: proporcione un nombre descriptivo para el proyecto del juego; este nombre se usará en el complemento.
-
Nombre de la flota: proporcione un nombre significativo para la flota de EC2 administrada; Amazon GameLift usa este nombre (junto con el ID de flota) al enumerar los recursos en la consola de AWS.
-
Nombre de la compilación: proporcione un nombre significativo para la compilación del servidor; AWS utiliza ese nombre para hacer referencia a la copia de la compilación del servidor que se haya cargado en Amazon GameLift y que se utilice para las implementaciones.
-
Parámetros de lanzamiento: introduzca las instrucciones opcionales que se ejecutarán al lanzar el ejecutable del servidor en una instancia de flota de EC2 administrada; la longitud máxima es de 1024 caracteres.
-
Carpeta del servidor de juegos: proporcione la ruta a una carpeta local que contenga la compilación del servidor.
-
Archivo del servidor de juegos: especifique el nombre del archivo ejecutable del servidor.
Escenario de implementación
En este paso deberá implementar el juego en una solución de alojamiento en la nube en función del escenario de implementación que elija. Este proceso puede tardar varios minutos, mientras AWS valida la compilación del servidor, realiza un aprovisionamiento de los recursos de alojamiento, instala el servidor de juegos y lanza los procesos del servidor y los prepara para alojar sesiones de juego.
Para iniciar la implementación, elija Implementar CloudFormation. Puede realizar el seguimiento del estado del alojamiento de su juego aquí. Para obtener información más detallada, puede iniciar sesión en la consola de administración de AWS para AWS y ver las notificaciones de eventos. Asegúrese de iniciar sesión con la misma cuenta, usuario y región de AWS que el perfil de usuario activo del complemento.
Cuando se complete la implementación, tendrá el servidor de juegos instalado en una instancia de EC2 de AWS. Hay al menos un proceso del servidor en ejecución y listo para iniciar una sesión de juego.
Lanzamiento del cliente de juegos
Cuando la flota se haya implementado correctamente, tendrá servidores de juegos en funcionamiento y disponibles para alojar sesiones de juego. Ahora puede crear el cliente, lanzarlo y conectarse para unirse a la sesión de juego.
-
Configure el cliente del juego. En este paso, le pide al complemento que actualice un activo
GameLiftClientSettings
para el proyecto del juego. El complemento utiliza este activo para almacenar cierta información que el cliente del juego necesita a fin de conectarse al servicio de Amazon GameLift.-
Si no ha importado ni inicializado el juego de ejemplo, cree un nuevo activo
GameLiftClientSettings
. En el menú principal del editor de Unity, seleccione Assets, Create, GameLift, Client Settings. Si crea varias copias de GameLiftClientSettings en el proyecto, el complemento lo detectará automáticamente y le dirá qué activo actualizará el plugin. -
En Launch Game, seleccione Configure Client: Apply Managed EC2 Settings. Esta acción actualiza la configuración del cliente del juego para que use la flota de EC2 que acaba de implementar.
-
-
Compile el cliente del juego. Compile un ejecutable del cliente mediante el proceso de compilación estándar de Unity. En File, Build Settings, cambie la plataforma a Windows, Mac, Linux. Si ha importado el juego de ejemplo y ha inicializado la configuración, la lista y el destino de la compilación se actualizarán automáticamente.
-
Lance el ejecutable del cliente del juego recién compilado. Para empezar a jugar, inicie entre dos y cuatro instancias de cliente y use la interfaz de usuario de cada una de ellas para unirse a una sesión de juego.
Si utiliza el cliente de juegos de ejemplo, tendrá las siguientes características:
-
Un componente de inicio de sesión para jugadores. Al conectarse a un servidor de juegos en una flota de Anywhere, no hay validación de jugadores. Puede introducir cualquier valor para unirse a la sesión de juego.
-
Una interfaz de usuario sencilla para unirse al juego. Cuando un cliente intenta unirse a una partida, busca automáticamente una sesión de juego activa con espacio disponible para un jugador. Si no hay ninguna sesión de juego disponible, el cliente solicita una nueva sesión de juego. Si hay alguna sesión de juego disponible, el cliente solicita unirse a esta. Al probar el juego con varios clientes simultáneos, el primer cliente inicia la sesión de juego y los demás se unen automáticamente a la sesión de juego existente.
-
Sesiones de juego con espacio para cuatro jugadores. Puede lanzar hasta cuatro instancias de clientes de juego simultáneas: se unirán todas a la misma sesión de juego.