Blog de Amazon Web Services (AWS)
Compilación de servidores dedicados de Unreal Engine 4 para instancias de AWS Graviton EC2
Epic Games es una empresa líder de entretenimiento interactivo responsable de algunos de los juegos más grandes del mundo, incluido Fortnite, y también desarrolla Unreal Engine, Unreal Engine es una herramienta de creación 3D en tiempo real abierta y avanzada líder en el mundo. En continua evolución, no solo impulsa los juegos líderes del mundo, sino que también ofrece a los creadores de todos los sectores la libertad y el control para ofrecer contenido de vanguardia, experiencias interactivas y mundos virtuales envolventes.
Para ayudar a los desarrolladores de todas las formas y tamaños a crear, ejecutar y desarrollar juegos increíbles, Epic Games y AWS han colaborado para reforzar el soporte de instancias de AWS Graviton2 para Unreal Engine. Los procesadores AWS Graviton están diseñados a medida por AWS con núcleos Arm Neoverse de 64 bits para ofrecer el mejor precio y rendimiento para las cargas de trabajo en la nube que se ejecutan en Amazon EC2. Con la compatibilidad con AWS Graviton2, los creadores de Unreal Engine pueden utilizar un rendimiento de precios mejorado hasta un 40% en comparación con las instancias comparables basadas en x86 de la generación actual.
La compatibilidad total con AWS Graviton2 se lanzará en Unreal Engine 4.27, con mejoras adicionales en futuras versiones. Las vistas previas de Unreal Engine 4.27 están disponibles a través del iniciador de Epic Games y GitHub. El soporte de ARM64 también se está fusionando con versiones anteriores de Unreal Engine para beneficiar a los desarrolladores que ejecutan juegos y aplicaciones en AWS.
Si tu juego se convierte en un gran éxito de la noche a la mañana, el éxito continuo depende de servidores confiables capaces de adaptarse a las demandas de los jugadores. La flexibilidad es esencial, y AWS ofrece la plataforma informática basada en la nube más amplia y profunda, tanto si desea crear servidores de juegos usted mismo, integrarlos con las herramientas existentes o incluso pasar a un servicio totalmente administrado.
La introducción de las instancias Graviton2 de AWS EC2 ofrece aún más opciones para alojar sus servidores de juegos dedicados en Amazon EC2, lo que supone un salto importante en el rendimiento y las capacidades en comparación con los procesadores AWS Graviton de primera generación. Volver a compilar el código del servidor de juegos dedicado para que sea compatible con ARM64 es simple y fácil con Unreal Engine 4 (UE4). Aprenda a crear un servidor de juegos dedicado con instancias de Unreal Engine y AWS Graviton2 siguiendo la siguiente guía paso a paso:
Requisitos previos
- Una estación de trabajo Windows 10 con una GPU dedicada
- Estudio visual
Configuración del entorno de desarrollo
Esta sección le guía para obtener un servidor dedicado de Unreal Engine 4 compilado para la plataforma Arm y compatible para ejecutarse en una instancia de AWS Graviton2. La mayoría de las siguientes instrucciones son independientes de las plataformas x86 y Arm. Esta guía se centra en crear un entorno limpio y funcional en Windows antes de crear el juego para las instancias de AWS Graviton2.
Obtener acceso al código fuente de Unreal Engine
Para compilar servidores de juegos dedicados de Unreal Engine, debes tener Unreal Engine creado desde el código fuente. Para obtener acceso al código fuente de UE4, siga los pasos descritos aquí y, a continuación, vuelva a esta guía.
Instalación de Visual Studio Community Edition
Para compilar Unreal Engine desde el código fuente, recomiendo descargar Visual Studio 2019 Community Edition. Puede descargar Visual Studio 2019 Community Edition de forma gratuita aquí. Una vez completada la descarga, continúe con la instalación.
Para crear el editor de Unreal Engine y los proyectos de Unreal Engine, debes instalar algunas funciones opcionales. Vaya a la pestaña Cargas de trabajo, seleccione «Desarrollo de juegos con C++» y, a continuación, seleccione las siguientes opciones en el lado derecho:
- Herramientas de creación de perfiles de C++
- Desinfectador de direcciones C++
- SDK de Windows 10 (10.0.18362.0)
- Instalador de Unreal Engine
Seleccione la pestaña Componentes individuales y, a continuación, desplácese hacia abajo hasta «Compiladores, herramientas de compilación y tiempos de ejecución» y seleccione MSBuild.
Ya está listo para instalar Visual Studio 2019. Haz clic en Instalar y deja tiempo para que se complete.
Descargar el código fuente de Unreal Engine
Inicia sesión en GitHub y navega hasta el Repositorio GitHub de Unreal Engine y descarga la versión 4.26.2 o superior. Si bien el soporte oficial se publica como parte de la 4.27, los cambios ya se han fusionado en la 4.26.2 y versiones posteriores. Estoy usando 4.26.2 para esta guía.
Instalar dependencias de compilación cruzada
Para que Unreal Engine compile binarios para distribuciones de Linux cuando se ejecuta en Windows, debes instalar Cross-Compiling Toolchain. Para ello, vaya a la página de documentación de Cross-Compiling for Linux Unreal Engine. Descargue e instale la cadena de herramientas v17.
Compila Unreal Engine desde el código fuente
Extraiga el archivo zip del código fuente de Unreal Engine. He colocado la carpeta extraída en «C:\Users\Administrator\Documents\UnrealEngine».
Abra una sesión de Windows PowerShell como administrador:
Vaya a C:\Users\Administrator\Documents\UnrealEngine\
Ejecute Setup.bat
y espere a que se complete.
Ejecute el script GenerateProjectFiles.bat
En C:\Users\Administrator\Documents\UnrealEngine ahora debería haber un archivo llamado UE4.sln. Ábrala en Visual Studio 2019.
Si la instalación de Visual Studio 2019 recomienda instalar algún componente adicional, instálelo ahora. Una vez completada la instalación, defina la configuración de la solución en «Editor de desarrollo» y la plataforma de la solución en «Win64».
En el Explorador de soluciones de la columna de la derecha, haga clic con el botón derecho en el destino de compilación de UE4 y seleccione «Construir».
Unreal Engine tardará un poco, así que coge una taza de tu bebida favorita y regresa una vez que se haya completado la construcción.
Abra Unreal Engine
Vaya a C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64 e inicie UE4Editor.exe
Configuración de proyecto de juego en tercera persona
En el navegador de proyectos de Unreal, crea un nuevo proyecto de juegos.
En Seleccionar plantilla, selecciona «Tercera persona» y haz clic en Siguiente.
En Configuración del proyecto, asegúrese de que «Proyecto C++» esté seleccionado, asigne un nombre a su proyecto GravitonServer y seleccione Crear proyecto.
El proyecto ahora debería abrirse automáticamente en Visual Studio. Sin embargo, para crear un servidor dedicado, debe realizar algunos cambios en el archivo y, a continuación, volver a generar el archivo de proyecto de Visual Studio. Cierre la ventana de Visual Studio y realice los siguientes cambios.
Crear destino de compilación de servidor dedicado
Para crear un servidor dedicado para tu juego, debes crear un destino de compilación de servidor dedicado. Para ello, copiará el archivo de destino del editor y lo convertirá en un archivo de destino de servidor dedicado.
Abra el Explorador de Windows y vaya a C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Source.
Copie el archivo GravitonServerEditor.target.cs y asigne al nuevo el nombre GravitonServerServer.target.cs
Abra GravitonServerServer.target.cs en Visual Studio
Sustituya ambas instancias de GravitonServerEditorTarget
por GravitonServerTarget
. Cambie Type = TargetType.editor a Type
= TargetType.server.
El archivo final debe tener el aspecto de la siguiente imagen:
Ahora, regenera los archivos de proyecto de Unreal Engine para que Unreal Engine reconozca el nuevo objetivo de compilación del servidor. Para hacerlo, vaya a «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer», haga clic con el botón derecho en GravitonServer.uProject y, a continuación, haga clic en «Generar archivos de proyecto de Visual Studio».
Una vez generados los archivos, haga doble clic en «GravitonServer.sln» para abrir el proyecto de Visual Studio. Una vez que se haya cargado el proyecto, debe realizar cambios en la configuración del editor para configurar una compilación de servidor dedicado.
En el cuadro desplegable «Configuración de la solución», cambie a «Servidor de desarrollo».
Ahora puede crear el proyecto de servidor dedicado. Simplemente haga clic con el botón derecho en el nombre del proyecto de GravitonServer a la derecha y seleccione «Construir».
Antes de que puedas hacer ajustes a tu juego y empaquetar nuestro proyecto, vuelve a compilar el objetivo de compilación del editor. Para hacerlo, simplemente cambie el menú desplegable «Configuración de la solución» a «Editor de desarrollo».
Ahora cree su objetivo de editor de desarrollo haciendo clic con el botón derecho en el nombre del proyecto y haciendo clic en «Construir» una vez más.
Luego, abre tu proyecto en el editor de Unreal Engine y empaqueta este juego para entregarlo. Para hacerlo, haga doble clic en el archivo «GravitonServer.uProject» en el Explorador de Windows:
Dado que está utilizando el proyecto de ejemplo en tercera persona predeterminado, el proyecto GravitonServer debería parecerse a la imagen de abajo una vez que se haya cargado correctamente:
Agregar mapa de inicio
Añada un mapa nuevo a su proyecto. Esto será lo que verá el usuario cuando cargue el juego. Para que este tutorial sea sencillo, el nuevo mapa será solo una pantalla negra. Comience haciendo doble clic en la carpeta «Mapas»:
Haga clic con el botón derecho y seleccione «Nuevo nivel» y, a continuación, asigne al nuevo archivo el nombre «EntryLevel».
Ahora abre tu nuevo nivel. Haga doble clic en «EntryLevel» y seleccione «Guardar selección» cuando se le solicite.
Configurar los ajustes del mapa
Ahora, configure qué mapa cargarán el cliente y el servidor dedicado de forma predeterminada. Para este tutorial, el cliente cargará EntryLevel de forma predeterminada y el servidor dedicado cargará ThirdPersonExampleMap de forma predeterminada. Para hacerlo, abra Ajustes del proyecto en Editar → Ajustes del proyecto.
A continuación, seleccione «Mapas y modos», expanda el menú Configuración avanzada y cambie «Modo de juego de servidor predeterminado global» a «GravitonServerGamemode».
Ahora cambia los mapas predeterminados que cargan el servidor dedicado y el cliente del juego. Amplíe la sección de mapas predeterminada. Cambie el «Mapa predeterminado del juego» a «EntryLevel» y «Mapa predeterminado del servidor» a «ThirdPersonExampleMap»:
A continuación, cambia la configuración de empaquetado para empaquetar mapas con el juego cuando se cree y empaquete para su implementación. Para ello, haz clic en la opción «Empaquetado» en el menú de la izquierda y expándela haciendo clic en la flecha desplegable.
Ahora añade tus mapas al paquete de compilación. Desplázate hacia abajo hasta «Lista de mapas para incluir en una compilación empaquetada», haz clic en el botón «+» y aparecerán dos nuevas filas debajo.
Haz clic en los tres puntos junto al cuadro para añadir tus mapas y se abrirá una ventana del explorador de archivos. Vaya a «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Content\ ThirdPersonCPP\ Maps» y seleccione el archivo «ThirdPersonExampleMap.umap». Repita este paso para el archivo «EntryLevel.umap». Cuando hayas terminado, la pantalla de ajustes del proyecto debería tener el aspecto de la siguiente imagen:
En este tutorial, usa la función de consola del juego para conectarte al servidor dedicado del juego.
Nota: En un juego de producción, esto generalmente se manejaría mediante una lógica de emparejamiento personalizada, pero eso excede el alcance de este tutorial.
Para usar la consola del juego para conectarte al servidor dedicado, en Configuración de paquetes, desplázate hacia abajo hasta la sección «Proyecto» y verifica que «Configuración de compilación» esté establecida en «Desarrollo».
¡Puedes crear y empaquetar tu juego! Cree primero el cliente del juego y, a continuación, los binarios del servidor dedicado. Para comprobar que el servidor funciona correctamente, primero crea y empaqueta el juego para Windows y ejecútalo en localhost para garantizar que el cliente se pueda conectar correctamente. Cuando sepa que el juego funciona, lo creará y empaquetará para las instancias de AWS Graviton.
Creación y empaquetado del juego y el servidor de juego dedicado
El primer paso para crear y empaquetar el juego es garantizar que se seleccione el objetivo de compilación correcto. Crea el juego primero. Para comprobar que se ha seleccionado el objetivo de compilación correcto, vaya a Archivo → Empaquetar proyecto → Crear destino y compruebe que esté seleccionado «GravitonServer».
Para crear el juego, seleccione Archivo → Empaquetar proyecto → Windows (64 bits). Se abrirá una ventana del Explorador de Windows, en la que podrá seleccionar dónde se guardarán los binarios una vez que se hayan creado y empaquetado.
He seleccionado «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries». Colócalas donde quieras guardarlas. Una vez que hayas decidido dónde, haz clic en «Seleccionar carpeta» y comenzará el proceso de compilación.
En Unreal Editor, seleccionar «Mostrar registro de salida» te permitirá supervisar el proceso de compilación. Esto puede llevar algún tiempo, así que ahora es un buen momento para tomar otra taza de su bebida favorita. Una vez que se haya creado y empaquetado el binario del juego, puedes compilar y empaquetar el binario del servidor dedicado. Para ello, cambie el objetivo de compilación a «GravitonServerServer» yendo a Archivo → Empaquetar proyecto → Construir destino y seleccionando «GravitonServerServer».
Seleccione Archivo → Empaquetar proyecto → Windows (64 bits) una vez más. Seleccione el lugar para guardar los binarios de servidor dedicado compilados y empaquetados y, a continuación, espere a que se complete la compilación. Una vez que se haya completado la compilación, iniciará el servidor dedicado y conectará el cliente a él.
Ejecutar servidores de juegos dedicados en Windows
Para iniciar el proceso del servidor dedicado y comprobar que todo funciona correctamente, inicie el proceso del servidor dedicado con el registro habilitado. Abra Powershell y cambie los directorios a la ubicación en la que haya almacenado los archivos binarios del servidor dedicado. He usado «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsServer»
Para iniciar el servidor, escriba. \ GravitonServerServer.exe -log
que debe iniciar el servidor dedicado con el registro habilitado. Ahora debería abrirse una nueva ventana con los registros del servidor. Esto mostrará el puerto en el que escucha el servidor. En mi caso, es el puerto 7777, como se muestra en los registros del servidor aquí:
Conéctese al servidor de juegos dedicado que se ejecuta en Localhost
Ahora vamos a comprobar que tu juego se puede conectar a tu servidor dedicado que se ejecuta en Localhost. Para iniciar el juego, abre el Explorador de Windows y navega hasta «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries\ WindowsNoEditor» y, a continuación, haz doble clic en «GravitonServer.exe» para empezar.
El juego debería abrirse en una pantalla negra en Unreal Editor, que es el mapa EntryLevel que creaste anteriormente. Una vez abierto el juego, abre la consola del juego presionando la tecla `del teclado. Para conectarse al servidor, escriba «Open «127.0.0. 1:7777»» y presione enter:
Si el juego no se conecta inmediatamente, es posible que el proceso del servidor dedicado se haya suspendido. Simplemente detenga y reinicie el proceso del servidor que se ejecuta en PowerShell e intente conectarse de nuevo. Una vez que el juego se conecte, deberías ver la experiencia del juego en Unreal Editor.
Creación y empaquetado de un servidor de juegos dedicado para instancias de AWS Graviton2
Ahora que ha comprobado que tanto el juego como el servidor dedicado funcionan correctamente, puede crear y empaquetar su servidor dedicado para instancias EC2 con tecnología de AWS Graviton2. Vuelve al editor de Unreal Engine. Seleccione Archivo → Paquete de proyecto → Linux → Linux (AArch64):
Se abrirá una ventana del Explorador de Windows, que le permitirá seleccionar dónde se guardarán los binarios una vez que se creen y empaqueten. He seleccionado «C:\Users\Administrator\Documents\Unreal Projects\ GravitonServer\ Binaries». Colócalas donde quieras guardarlas. Haga clic en «Seleccionar carpeta» y comenzará el proceso de compilación. Una vez completada la compilación, deberías ver una carpeta llamada «LinuxaArch64Server» donde quieras guardar tus archivos binarios.
Para copiar más fácilmente a su instancia EC2 con tecnología de AWS Graviton2, cree un archivo zip de toda la carpeta que copiará en su instancia EC2 de AWS Graviton2.
Configuración de servidor de juegos dedicado
Lanzar la instancia EC2 de AWS Graviton2
Para el servidor dedicado, utilizaré una instancia EC2 m6g.large que ejecute Amazon Linux 2. Siéntase libre de usar cualquier tamaño de instancia m6g, pero una instancia m6g.large debería ser lo suficientemente grande. Diríjase a la consola de AWS y lance su propia instancia de desarrollo. Al lanzar instancias de Graviton2, tendrá que especificar una AMI compatible con Arm.
Al lanzar esta instancia, asegúrese de que la configuración del grupo de seguridad permita que la máquina de desarrollo de Windows se comunique con el servidor dedicado en el puerto UDP 7777 y el puerto TCP 22. Usaremos el puerto 7777 para el tráfico del juego y el puerto 22 para SSH.
Una vez que la instancia esté en ejecución, copie el binario de Windows a la instancia de AWS Graviton2 con las herramientas que prefiera.
Ejecutar script de inicio de servidor de juegos
Una vez que el archivo zip que contiene el binario del servidor dedicado se haya copiado en la instancia, la configuración lleva a cabo algunos pasos más. Primero, descomprima el archivo. Navega hasta el directorio en el que almacenaste el archivo y ejecuta «unzip». /LinuxAArch64Server.zip que es».
Una vez que se haya descomprimido el archivo, debería ver un nuevo directorio. Navegue hasta el directorio recién creado ejecutando cd LinuxaArch64Server/
El nuevo directorio debe tener el aspecto de la siguiente imagen:
Para ejecutar el servidor dedicado, agregue permisos de ejecución al script GravitonServerServer-AArch64.sh
del shell de inicio. Para ello, ejecute chmod +x GravitonServerServer-AArch64.sh
Ahora puede iniciar el procesamiento del servidor de juegos ejecutando. /GravitonServerServer-AArch64.sh
Una vez iniciado el proceso, debería ver la siguiente imagen:
Conexión a un servidor de juegos dedicado que se ejecuta en la instancia AWS Graviton2
Ahora que el servidor del juego se está ejecutando y esperando conexiones, conéctate a él desde la máquina de desarrollo de Windows que ejecuta el juego. Inicia el juego como antes. Debería abrirse en una pantalla negra, que es el mapa EntryLevel que creó anteriormente. Una vez abierto el juego, abre la consola del juego presionando la tecla `del teclado. Cuando la consola del juego esté abierta, conéctate a la dirección IP pública de tu instancia. Una vez que el juego se conecte, deberías ver algo como esto:
Ahora ha creado y compilado correctamente un juego de ejemplo de Unreal Engine para las instancias EC2 de Windows y AWS Graviton2. Ahora puede aprovechar un rendimiento de precio mejorado hasta un 40% en comparación con las instancias comparables basadas en x86 de la generación actual mediante el alojamiento de servidores dedicados en instancias de AWS Graviton2. Ahora que puede compilar un servidor de juegos compatible con AWS Graviton2, pruebe sus servidores de juegos en instancias de Graviton2.