Implementación local y depuración del proyecto de ejemplo ThirdPersonMP
El propósito de esta guía es demostrar cómo ejecutar su servidor de juego en su máquina local, de forma compatible con MPS, para que pueda probar y depurar el servidor antes de cargarlo en PlayFab.Objetivos
- Probar las opciones de implementación local para el proyecto ThirdPersonMP+GSDK.
- Comprobar que el servidor se ejecuta correctamente cuando se ejecuta con LocalMultiplayerAgent
- Comprobar que puede asociar un depurador a la instancia del servidor
Requisitos
- Descargue Visual Studio. La versión Community es gratuita.
- Cargas de trabajo necesarias: desarrollo de escritorio de .NET y desarrollo para el escritorio con C++
- Descargue el código fuente de Unreal Engine. Para obtener instrucciones, consulte Descarga del código fuente de Unreal Engine (externo).
- Proyecto de Unreal completado con el GSDK de Unreal de PlayFab instalado y configurado
- Configuración “Development Server” de su proyecto compilada desde Visual Studio
- [Opcional] Descargue el LocalMultiplayerAgent
- [Opcional] Como alternativa, descargue el código fuente de LocalMultiplayerAgent.
- Configuración “Debug” o “Release” de LocalMultiplayerAgent compilada desde este repositorio con Visual Studio
- Con Visual Studio, abra MpsAgent.sln, seleccione la configuración Debug o Release y, a continuación, compile el LocalMultiplayerAgent.
- [Opcional] Instale Docker para Windows
Notación
{depot} hará referencia a la ruta de acceso completa de Windows para la ubicación donde descarga sus proyectos de Git. Pueden estar en cualquier lugar que desee, como: C:\depot, S:\depot, Z:\gitrepos o la unidad y la ruta de acceso que le resulten convenientes. Normalmente se recomienda (especialmente para Unreal) que su ruta de acceso {depot} sea lo más corta posible. Para el autor, {depot} se resuelve como:M:\depot\GSDK. Por ejemplo, con la lista de requisitos anterior, probablemente tendrá algunos o todos los siguientes:
- {depot}/ThirdPersonMP
- {depot}/MpsAgent
- [Opcional] {depot}/gsdk [Contiene el complemento GSDK de Unreal de PlayFab instalado previamente en ThirdPersonMP]
- [Opcional] {depot}/UnrealMarketplacePlugin [Contiene el complemento de Unreal Marketplace de PlayFab, que no es necesario para esta guía, pero sí para la mayoría de las características de PlayFab]
Instrucciones
Ejecución local, sin contenedores
En primer lugar, deberá configurar su LocalMultiplayerAgent para ejecutar el proyecto del servidor. La primera iteración ejecuta el proceso directamente en su PC local sin ningún aislamiento. En el Explorador, busque y abra el archivo:{depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json. A continuación se muestra una versión abreviada de este archivo con las partes importantes para esta guía [NOTA: observe las \ de escape en las rutas de acceso del json; se trata de un archivo json y, por tanto, es necesario aplicar secuencias de escape a todas las \ como \\]:
... en el ejemplo anterior simplemente utilizan los valores predeterminados del proyecto. El propósito y los valores de los campos importantes son los siguientes:
- RunContainer: para esta guía, siempre será false. Establecerlo en true requiere Docker.
- Cuando es true, se ignora ProcessStartParameters/StartGameCommand y se usa ContainerStartParameters/StartGameCommand en su lugar
- Cuando es true, todo se compila y se ejecuta en un contenedor de Docker, en lugar de en el contexto de la máquina local
- Esta guía cubre el escenario en el que RunContainer es false, para que podamos depurar más fácilmente el proceso del servidor
- Establecerlo en true requiere una compilación de servidor Shipping, además de Docker para Windows
- OutputFolder:
"<Local absolute path that will be used to store the required output artifacts>"- Esta ubicación debe estar completamente definida y debe existir un directorio válido en esta ubicación.
- AssetDetails/LocalFilePath: {PATH-TO-ZIP}
- Esta ubicación debe estar completamente definida y debe existir un archivo zip válido en esta ubicación
- Este archivo zip debe contener una compilación “Shipping Server” completamente construida
- PortMappingsList:
- Es el equivalente en LocalMultiplayerAgent de definir el puerto en Game Manager
- El complemento GSDK está codificado de forma rígida para buscar un puerto con el nombre: gameport
- El método SetDefaultServerHostPort del complemento GSDK invalidará internamente el puerto interno de hospedaje del servidor de Unreal para que coincida con este puerto
- El complemento GSDK usará únicamente el puerto denominado gameport, que se configura en PortMappingsList cuando se usa LocalMultiplayerAgent.
- Este json le permite probar localmente que este número de puerto proviene de MPS y garantiza que su complemento GSDK lo recibirá correctamente
- ContainerStartParameters/StartGameCommand: mientras RunContainer sea false, no se usa.
- Cuando RunContainer==true, reemplaza a ProcessStartParameters/StartGameCommand
- Esta ruta de acceso es la ruta interna dentro del contenedor de Docker y será la suma de AssetDetails/MountPath más la ruta interna al ejecutable en su archivo zip definido por AssetDetails/LocalFilePath
- Para este ejemplo, podría ser:
C:\\Assets\\ThirdPersonMPServer.exe -log
- ProcessStartParameters/StartGameCommand: este comando será, en la práctica, la ruta de acceso a su ejecutable y los parámetros de línea de comandos que se usan para iniciar su servidor de juego
- -log es un comando de Unreal para indicar al servidor de juego que guarde un registro de ejecución
- {PATH-TO-EXE} puede ser una de dos opciones:
- Cualquier ruta de acceso absoluta a un ejecutable de su servidor de juego (incluso un servidor de juego de desarrollo), más los parámetros de línea de comandos de su servidor
- Esta opción ignora el contenido del archivo zip y, en su lugar, ejecuta cualquier ejecutable arbitrario en cualquier ubicación
- Es una opción de depuración local que solo funciona en su máquina local para depurar compilaciones de desarrollo: no le ayuda a comprobar que su archivo zip está listo para cargarse en MPS
- Esta opción debe usarse al probar un servidor de desarrollo, adecuado para asociar un depurador de VS
- Para este ejemplo, podría ser:
{depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log - Para el autor, es:
M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log
- Una ruta de acceso relativa, que debe indicar la ruta relativa dentro de su archivo zip, para ejecutar su servidor
- Es el flujo de trabajo estándar que refleja cómo funciona en una instancia en la nube de MPS
- Esta opción debe usarse al probar un servidor shipping y ayuda a comprobar que su zip está listo para cargarse en MPS
- Para este ejemplo, podría ser:
ThirdPersonMPServer.exe -log
- Cualquier ruta de acceso absoluta a un ejecutable de su servidor de juego (incluso un servidor de juego de desarrollo), más los parámetros de línea de comandos de su servidor
Depuración del servidor
Puede ejecutar LocalMultiplayerAgent desde Visual Studio con el comando “Start New Instance”, a veces asignado a F5, o puede ir a{depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1 y hacer doble clic en “LocalMultiplayerAgent.exe”. También puede ejecutarlo desde una ventana cmd para observar o capturar la información del registro de depuración.
Al ejecutar LocalMultiplayerAgent.exe debería iniciarse su servidor de juego. Por lo general, querrá tener abierto el Administrador de tareas para esto. Puede encontrar el identificador de proceso de su servidor de juego en la pestaña Detalles del Administrador de tareas.
Cuando vea el proceso ThirdPersonMPServer en ejecución en el Administrador de tareas, puede volver a Visual Studio y seleccionar el menú desplegable Debug -> Attach to Process. En la ventana emergente, puede buscar el nombre de su proceso: ThirdPersonMPServer y, a continuación, seleccionar el identificador de proceso correcto, identificado en el Administrador de tareas.
En este punto, debería poder realizar una depuración típica en su servidor de juego.
NOTA: Unreal proporciona varias configuraciones de compilación y varias formas de compilar su servidor. Para obtener los mejores resultados, use la configuración “Development Server” y la salida compilada directamente desde Visual Studio. Las compilaciones Shipping, o las compilaciones desde el Development Editor, pueden funcionar mejor en otras situaciones, pero la configuración “Development Server” compilada directamente desde Visual Studio será más fácil de asociar y depurar en Visual Studio.
