En el paso anterior, creamos un PNJ que puede moverse hacia adelante y girar a la izquierda y a la derecha cuando se le ordena. En este paso, configuraremos tableros de juego por los que el personaje se podrá mover.
Para este juego, el tablero de juego deberá conocer y gestionar lo siguiente:
Tamaño de cuadro: qué tan grandes son los cuadros del tablero para que el personaje sepa hasta dónde moverse.
Cámara: qué cámara utilizar cuando el personaje llega a este tablero de juego. Para ello, utilizamos el dispositivo de cámara de punto fijo.
Posición inicial: la posición donde el personaje debe empezar en el tablero. Para esto, utilizamos una utilería del modo Creativo para poder establecerla fácilmente como una propiedad editable y obtener su transformación.
Objetivo final: el objetivo final hacia el cual se dirige el personaje y que señala el final del tablero de juego. Para esto, utilizamos un dispositivo activador que señala cuando el personaje se posiciona sobre él.
Obstáculos: los obstáculos impiden al personaje alcanzar inmediatamente el objetivo final. Estos se explican con más detalle en Cómo crear obstáculos.
Cada uno de estos se rastrea en la clase del tablero de juego. La clase tiene el especificador "concrete" para que pueda ser una propiedad editable en un dispositivo de Verse, y cada miembro de clase tiene un atributo editable a fin de poder cambiar sus valores de UEFN.
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Ahora que el tablero tiene definidas sus propiedades, añadamos su comportamiento:
Gestión del objetivo final: cuando el tablero de juego esté configurado, nos suscribiremos al
TriggeredEventdel objetivo final. Utilizamos un gestor de eventos y un evento personalizado para señalar de forma pública que se alcanzó el objetivo final cuando el personaje activa el dispositivo activador. Para obtener más detalles, consulta Cómo codificar interacciones entre dispositivos.Inicio del tablero de juego: al inicio del tablero de juego, asigna el dispositivo de cámara a todos los jugadores.
Fin del tablero de juego: al final del tablero de juego, quita el dispositivo de cámara a todos los jugadores.
La siguiente es la clase completa para el tablero de juego:
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Cómo crear obstáculos
Los obstáculos impiden al personaje alcanzar inmediatamente el objetivo final. En este juego, utilizamos dispositivos de barrera como obstáculos para impedir que el personaje se mueva, y dispositivos activadores que desactivan las barreras.
Nuestra definición de la clase obstáculo incluye lo siguiente:
IsObstaclePassed: datos para almacenar si las barreras están activadas o desactivadas en ese momento. Tipo Logic porque solo existen dos estados.
Barreras: dispositivos de barrera asociados al obstáculo. Esto significa que puedes tener más de un dispositivo de barrera acoplado al activador que lo desactiva.
BarrierDissolves: secuencias cinemáticas que se reproducen cuando se superan obstáculos.
BarrierAppears: secuencias cinemáticas que se reproducen cuando se restablecen los obstáculos.
Activador: un dispositivo activador que el personaje debe alcanzar a fin de desactivar el obstáculo.
La siguiente es la clase completa para representar obstáculos, y la clase tiene el especificador concreto para que pueda ser una propiedad editable en un dispositivo de Verse.
# An obstacle on the gameboard, with an associated set of
# Barrier devices, Trigger devices that deactivate the barriers,
# and Cinematic Sequence devices that play sequences for barriers dissolving and appearing for visual feedback on what is happening.
# This class has the concrete specifier so it can be an editable property on a Verse device.
obstacle := class<concrete>:
# Data for storing whether barriers are currently enabled/disabled.
var IsObstaclePassed:logic = false
# The array of barriers for this obstacle.
Cómo añadir tableros de juego
Ahora que el tablero de juego está definido, puedes añadir una matriz de estos tableros de juego a tu dispositivo de Verse, que verás más adelante en 6. Cómo gestionar el bucle de juego.
En el proyecto que creaste a partir de la plantilla VKT: dispositivos de juego de Verse para principiantes, busca en el esquematizador el dispositivo Minijuego Verse Commander y selecciónalo para abrir el panel de detalles.
En el panel de detalles debajo de Tableros de juego, verás cinco elementos que corresponden a los tableros del juego. Amplía esos elementos para ver qué dispositivos, cinemáticas y otras propiedades se utilizan en el tablero de juego.
Puedes añadir más niveles al juego si seleccionas Añadir elemento para tableros de juego.
Puedes eliminar niveles del juego si seleccionas el menú desplegable junto al tablero de juego que quieres eliminar.
También puedes reordenar los tableros de juego para cambiar el orden de los niveles en el juego si mantienes pulsado el elemento y lo arrastras antes o después de otros elementos del tablero.
Para probar niveles específicos, puedes reordenar los tableros para que el nivel que quieras probar aparezca primero en la lista.
Próximo paso
Ya definimos los tableros de juego y mostramos cómo añadir tantos tableros como desees. En el próximo paso, obtendrás más información sobre cómo diseñar los tableros a fin de desarrollar rompecabezas y trabajar sobre las limitaciones.