A la hora de aprender sobre los fundamentos de Unreal Engine, es importante saber funciona el marco de juego de Unreal. En este documento, vamos a explicar como configurar el modo de juego y las clases de estado de juego.
Modo de juego
El modo de juego es el responsable de definir las normas fundamentales de juego, tales como el número de jugadores o cómo estos se unen al juego. Además, proporciona un marco para establecer útiles clases de juego, como el estado de juego, el controlador de jugador, el HUD o la clase de peón por defecto.
Para establecer un modo de juego para Parrot, sigue los siguientes pasos:
En el explorador de contenido haz clic en Contenido > Blueprints > Game.
Haz clic derecho en el explorador y haz clic en Clase de Blueprint.
Establece la clase padre en AGameModeBase.
Nombra la clase "BP_ParrotGameMode".
Haz doble clic en el blueprint recién creado para ver las clases que define. En al caso de Parrot, hay que cambiar algunas de estas clases:
Game State Class se debería establecer en BP_ParrotGameState.
Player Controller Class se debería establecer en BP_ParrotPlayerController.
HUD Class se debería establecer en BP_ParrotHUD.
Default Pawn Class se debería establecer en BP_ParrotPlayerCharacter.
Ve a Editar > Configuración del proyecto > Mapas y modos, y establece Modo de juego predeterminado en BP_ParrotGameMode.
Habiendo configurado el modo de juego, ya podrás establecer su estado.
El estado de juego
El estado de juego gestiona lo que está sucediendo en ese momento en el juego. Gestiona la información que necesitan conocer los clientes, pero no depende de ningún jugador en concreto. Es donde se guarda la puntuación de equipo, por ejemplo.
Sigue estos pasos para crear un estado de juego:
En el editor principal, selecciona Herramientas > Nueva clase de C++...
Establece la clase padre en AGameModeBase.
Nombra la clase "AParrotGameState".
En el explorador de contenido, haz clic en + Añadir > Clase de blueprint.
Establece la clase padre en AParrotGameState.
Nombra la clase "AParrotGameState".
En tu blueprint de modo de juego, asigna BP_ParrotGameState al campo de estado de juego.
Repaso de los conceptos modo de juego y estado de juego
Si quieres más información sobre el modo de juego y el estado de juego, consulta Game Mode and Game State (Modo de juego y estado de juego). A medida que vayas creando nuevas clases durante el desarrollo, no te olvides de actualizar el modo de juego y el estado de juego.
El modo de juego también se puede establecer por mapa. El menú principal de Parrot utiliza un modo de juego diferente al que se utiliza en los niveles del juego.
Instancia de juego
La instancia de juego es una instancia de clase aislada persistente en el motor que gestiona funciones específicas del proyecto. Existe a lo largo de todo el ciclo de vida de la aplicación. Contiene el cliente del visor del juego y el jugador local.
Siguiendo el mismo patrón que con el modo y el estado de juego, creamos una clase base C++ UParrotGameInstancem y una clase de blueprint BP_ParrotGameInstance. Puedes establecer la clase de instancia del proyecto en Editar > Configuración del proyecto > Mapas y modos.
Sigue estos pasos para crear una instancia de juego para Parrot:
En el editor principal, selecciona Herramientas > Nueva clase de C++...
Establece la clase padre en UGameInstance.
Nombra la clase "UParrotGameInstance".
En el explorador de contenido, haz clic en + Añadir > Clase de blueprint.
Establece la clase padre en UParrotGameInstance.
Nombra la clase "BP_ParrotGameInstance".
Ve a Editar > Configuración del proyecto > Mapas y modos y establece Clase de instancia de juego en BP_ParrotGameInstance.
Ejemplo de transmisión de niveles
En Parrot, los mapas son únicos para los diferentes modos de juego y la instancia de juego indica cuál debe cargarse utilizando archivos UParrotMapDataAsset. Se trata de recursos de datos que contienen un puntero suave de objeto a un archivo de mapa. Estos recursos se organizan en la instancia de juego y se puede alternar entre ellos mientras el jugador va progresando en el juego. Dado que están en la instancia de juego, siempre podrás transmitir el siguiente nivel desde cualquier lugar. El controlador de jugador presta atención a posibles cambios en el estado de juego y acude a la instancia de juego cuando es necesario.
Las siguientes capturas de pantalla muestran un blueprint que utiliza el nodo Stream Level y el nodo Async Load Asset para cargar de forma asíncrona la referencia de objeto suave a un ParrotMapDataAsset. Después, se llama al nodo Open Level sin tener que esperar a una carga síncrona, ya que el nivel ya se ha cargado. En este caso, también se utiliza el complemento CommonLoadingScreen. El widget de pantalla de carga se invocará durante la carga previa del siguiente mapa y se eliminará tras la carga.
Para obtener más información acerca de la pantalla de carga y el motivo por el que Parrot utiliza la carga asíncrona en vez de la síncrona, consulta la documentación Interfaz de usuario para Parrot.