Al aprender los conceptos básicos de Unreal Engine, debes conocer cómo funciona el marco de jugabilidad de Unreal. En este documento, trataremos cómo configurar el modo de juego y las clases de estado de juego para Parrot.
Modo de juego
El modo de juego sirve para definir las reglas básicas de la partida, como la cantidad de jugadores, o cuántos jugadores se unen al juego. También proporciona un marco para configurar clases de juego útiles, como el estado de juego, el controlador de jugador, el HUD y la clase de peón predeterminado.
Para configurar el modo de juego para Parrot, sigue estos pasos:
En el explorador de contenido, haz clic en Contenido > Blueprints > Juego.
Haz clic con el botón derecho en el explorador y haz clic en Clase de blueprint.
Establece la clase base en AGameModeBase.
Asigna el nombre "BP_ParrotGameMode" a la clase.
Haz doble clic en el blueprint recién creado para ver las clases centrales que define. Para Parrot, es necesario cambiar algunas de estas clases:
Clase de estado de juego debe establecerse en BP_ParrotGameState.
Clase de controlador de jugador debe establecerse en BP_ParrotPlayerController.
Clase de HUD debe establecerse en BP_ParrotHUD.
Clase de peón predeterminado debe establecerse en BP_ParrotPlayerCharacter.
Dirígete a Editar > Ajustes del proyecto > Mapas y modos y establece Modo de juego predeterminado en BP_ParrotGameMode.
Ahora que ya está configurado el modo de juego, puedes configurar el estado de juego.
El estado de juego
El estado de juego controla lo que sucede actualmente en el juego. Administra la información que tienen que saber los clientes, pero no se vincula a ningún jugador específico. Por ejemplo, acá podrías guardar la puntuación de los equipos.
Para crear un estado de juego para Parrot, sigue estos pasos:
En el editor principal, selecciona Herramientas > Nueva clase C++...
Establece la clase base en AGameStateBase.
Asigna el nombre "AParrotGameState" a la clase.
En el explorador de contenido, haz clic en + Añadir > Clase de blueprint.
Establece la clase base en AParrotGameState.
Asigna el nombre "BP_ParrotGameState" a la clase.
En el blueprint de modo de juego, asigna BP_ParrotGameState al campo de estado de juego.
Revisión de los conceptos de modo de juego y estado de juego
Para obtener más información acerca del modo de juego y estado de juego, consulta Modo de juego y estado de juego. A medida que se crean clases nuevas durante el desarrollo, recuerda actualizar el modo de juego y el estado de juego.
El modo de juego también se puede establecer por mapa. En el menú principal de Parrot, se usa un modo de juego distinto que el que se utiliza en los niveles del juego.
Instancia de juego
La instancia de juego es una instancia de clase permanente en el motor que controla la funcionalidad específica del proyecto. Existe durante toda la vida útil de tu aplicación. Contiene el cliente del visor del juego y el jugador local.
Siguiendo el mismo patrón que el modo y el estado de juego, creamos una clase C++ base, UParrotGameInstance, y una clase de blueprint, BP_ParrotGameInstance. Para establecer la clase de instancia de juego de tu proyecto, dirígete a Editar->Ajustes del proyecto->Mapas y modos.
Para crear una instancia de juego para Parrot, sigue los pasos a continuación:
En el editor principal, selecciona Herramientas > Nueva clase C++...
Establece la clase base en UGameInstance.
Asigna el nombre "UParrotGameInstance" a la clase.
En el explorador de contenido, haz clic en + Añadir > Clase de blueprint.
Establece la clase base en UParrotGameInstance.
Asigna el nombre "BP_ParrotGameInstance" a la clase.
Ve a Editar > Ajustes del proyecto > Mapas y modos y establece Clase de instancia de juego en BP_ParrotGameInstance.
Ejemplo de streaming de niveles
En Parrot, los distintos mapas son específicos de los diferentes modos de juego, y mediante la instancia de juego, se sabe qué mapa debe cargarse con los archivos UParrotMapDataAsset. Estos son recursos de datos que contienen un puntero de objeto suave a un archivo de mapa. Estos recursos están organizados en la misma instancia y pueden ir rotando a medida que el jugador avanza en el juego. Debido a que esto se encuentra en la instancia de juego, siempre puedes cargar el siguiente nivel en streaming desde cualquier ubicación. El controlador de jugador escucha los cambios de estado de juego y después llama a la instancia del juego según se requiera.
La siguiente captura de pantalla muestra un blueprint que usa los nodos Stream Level y Async Load Asset para cargar de forma asíncrona la referencia de objeto suave a un ParrotMapDataAsset. Luego, se llama al nodo Open Level sin tener que esperar por una carga síncrona, porque el nivel ya está cargado. Aquí también se usa el complemento CommonLoadingScreen. El widget de pantalla de carga se invocará durante la precarga del próximo mapa, y se quitará durante la poscarga.
Para obtener más detalles sobre la pantalla de carga y por qué Parrot realiza aquí una carga asíncrona en lugar de una síncrona, consulta la documentación Interfaz de usuario para Parrot.