Con las etiquetas de juego, puedes encontrar actores marcados con una etiqueta específica mientras se está ejecutando el juego. Las etiquetas de juego te permiten trabajar con varios actores sin necesidad de definir propiedades ni asignar referencias en Unreal Editor para Fortnite (UEFN). Las etiquetas de juego se crean en código de Verse y se asignan en UEFN.
Al utilizar etiquetas de juego, se puede acceder a interesantes oportunidades de juego, como las siguientes:
Alterar la configuración del nivel sin tener que añadir o modificar las referencias del dispositivo a tu dispositivo creado con Verse.
Buscar todos los actores con una etiqueta específica y operarlos según su type, como encender luces o activar barreras.
Cambiar dinámicamente qué actores están activos a medida que el jugador avanza en el juego.
Habilitar actores de manera condicional para una carrera de obstáculos en función de una opción de dificultad que selecciona el jugador.
¿Qué se puede etiquetar?
Actualmente, las etiquetas de juego se pueden asignar a lo siguiente:
En las siguientes secciones, se muestra cómo crear y trabajar con etiquetas de juego en el proyecto.
Cómo crear una etiqueta de juego
Sigue estos pasos para crear una etiqueta de juego nueva con Verse:
Abre tu archivo de Verse en Visual Studio Code con el Explorador de Verse.
En la parte superior de tu archivo de Verse, agrega el siguiente código para habilitar la referencia a la
clasede etiqueta.Verseusing { /Verse.org/Simulation/Tags }Crea una nueva clase que hereda de la clase de
etiqueta. El nombre de la clase determina el nombre de la etiqueta. En este ejemplo, la clase se llamamytag, por lo que el nombre de la etiqueta de juego es mytag.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}El archivo de Verse debería verse de la siguiente manera:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Guarda tu archivo de Verse y haz clic en Compilar secuencias de comandos de Verse en la barra de herramientas de UEFN para compilar tu código y poder usar tu nueva etiqueta de juego.
Las etiquetas de juego son etiquetas jerárquicas. Estas etiquetas pueden tener cualquier cantidad de niveles jerárquicos, separados por el carácter _ en el nombre de la clase.
Cuando el nombre de la etiqueta de juego aparece en el editor, los caracteres _ se convierten en ".".
Por ejemplo, una etiqueta de juego con tres niveles tendría el nombre de clase family_genus_species y aparecería en el editor como "family.genus.species", siendo "familia" el identificador más amplio de la jerarquía, y "especie" el más específico.
Ten en cuenta que el hecho de que exista "family.genus.species" no significa implícitamente que también existan las etiquetas de juego "family.genus" y "family". Debes crear estas etiquetas de juego en Verse con los nombres de clase family y family_genus para que se generen los niveles jerárquicos.
Cómo asignar una etiqueta de juego
Sigue estos pasos para asignar una etiqueta de juego. En este ejemplo, se usa un dispositivo, pero los pasos son los mismos para otros actores.
En UEFN, en el esquematizador, selecciona el dispositivo que deseas etiquetar para abrir su panel de detalles. En este ejemplo, el dispositivo es un dispositivo Botón.
En el panel de detalles, haz clic en Añadir nuevo componente y elige Marcado de etiquetas de Verse en el menú desplegable.
Selecciona el componente VerseTagMarkup para ver su configuración en el panel de detalles.
En Etiquetas de juego, edita la propiedad Etiquetas y añade tu etiqueta de juego. En este ejemplo, mytag se añade al dispositivo.
Puedes agregar varias etiquetas al mismo actor, por lo que cada actor puede pertenecer a diversos grupos al mismo tiempo. Si tienes un actor con varias etiquetas, podrás encontrarlo por cualquiera de ellas.
Por ejemplo, encontrarás un actor con las etiquetas mytag1 y mytag2 cuando llames a GetCreativeObjectsWithTag(mytag1{}) o GetCreativeObjectsWithTag(mytag2{}).
Cómo buscar actores con una etiqueta de juego
Una vez que tengas actores con etiquetas de juego asignadas, puedes encontrar esos dispositivos por su etiqueta de juego durante una partida utilizando la función de Verse GetCreativeObjectsWithTag(). En el siguiente ejemplo, llamar a GetCreativeObjectsWithTag(mytag{}) da como resultado que TaggedDevices contenga todos los actores que tienen mytag asignado:
TaggedActors := GetCreativeObjectsWithTag(mytag{})La llamada a la función GetCreativeObjectsWithTag() devuelve una matriz de todos los objetos que implementan creative_object_interface. Por ejemplo, si asignaste mytag tanto a un dispositivo de botón como a un dispositivo de luz personalizable en el nivel, esta llamada a función devolvería ambos dispositivos.
Puedes convertir el resultado de GetCreativeObjectsWithTag() a una de sus clases de implementación (denominada proyección de tipo) con la sintaxis NewObjectReference := object_type_to_cast_to[ObjectReference], donde object_type_to_cast_to es el tipo de objeto que deseas. Por ejemplo, si quieres apagar o encender un dispositivo de luz personalizable, debes convertir el resultado a customizable_light_device antes de llamar a la función TurnOff() o TurnOn().
La proyección de tipo es una expresión falible porque la conversión de tipo fallará si el dispositivo no se puede convertir a ese tipo, por ejemplo, si se trata de un tipo diferente de dispositivo. Por ejemplo, no puedes convertir un dispositivo de botón en una clase customize_light_device, porque un dispositivo de botón y un dispositivo de luz personalizable no son el mismo tipo de dispositivo.
Con las expresiones for, puedes utilizar expresiones falibles como un filtro y crear nuevas variables para utilizar en el bloque de código for. Por ejemplo, puedes agregar la conversión de tipo de customize_light_device a la expresión de iteración en for. Dado que el dispositivo se convertirá en customizable_light_device, podrás utilizar las funciones específicas de esa clase, como TurnOff() para apagar la luz.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()En el siguiente ejemplo, se muestra cómo comprobar de manera condicional el tipo de actor y llamar a diferentes funciones según el tipo. En el ejemplo, se comprueba si el actor etiquetado es un dispositivo de luz personalizable que puede llamar a TurnOff() para apagar la luz, o si el actor es un dispositivo de barrera que puede llamar a Disable() para apagarla.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# If the tagged actor is a Customizable Light device, turn it off
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# If the tagged actor is a Barrier device, turn it off
BarrierDevice.Disable()Al llamar a GetCreativeObjectsWithTag(), la lista resultante no está ordenada por ningún método que puedas conocer o modificar de antemano. En los casos en los que agregues o quites actores entre llamadas a GetCreativeObjectsWithTag() con la misma etiqueta, la lista resultante puede estar en otro orden para cada resultado de llamada.
Si tu juego necesita manejar actores en un orden específico, entonces debes usar una matriz editable en lugar de etiquetas de juego, ya que el resultado de GetCreativeObjectsWithTag() es una lista desordenada de actores.
Cómo buscar posiciones por tipo con etiquetas de juego
A continuación, se muestra un ejemplo de cómo filtrar los actores que devuelve GetCreativeObjectsWithTag() por tipo e imprimir su posición.
# find all actors with the all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Print the position of all creative_prop actors with the all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Print the position of all device actors with the all_tag
for (Device:AllCreativeObjects):
Cómo explorar tutoriales que usan etiquetas de juego
En los siguientes tutoriales, se muestra cómo utilizar las etiquetas de juego en una partida.
Puzzle de luces combinadas
Crear un puzzle donde el jugador tenga que encontrar la combinación correcta de luces encendidas y apagadas para generar un elemento mediante un dispositivo creado con Verse.