Con las etiquetas de juego, puedes encontrar actores marcados con una etiqueta específica mientras el juego está en ejecución. Las etiquetas de juego te permiten trabajar con varios actores sin necesidad de configurar las propiedades y asignar referencias en Unreal Editor para Fortnite (UEFN). Las etiquetas de juego se crean en código 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 agregar o modificar las referencias de dispositivo al dispositivo creado con Verse.
- Buscar todos los actores con una etiqueta específica y operarlos según su tipo, como encender luces o activar barreras.
- Cambiar de forma dinámica qué actores se activan 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 el archivo de Verse en Visual Studio Code con el explorador de Verse.
- En la parte superior del archivo de Verse, agrega el siguiente código para habilitar la referencia a la clase
tag
.using { /Verse.org/Simulation/Tags }
- Crea una nueva clase que se herede de la clase
tag
. 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.# Deriva de la clase `tag` en el módulo Verse.org/Simulation/Tags para crear una nueva etiqueta de juego. mytag := class(tag){}
- El archivo de Verse debería verse de la siguiente manera:
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Deriva de la clase `tag` en el módulo Verse.org/Simulation/Tags para crear una nueva etiqueta de juego. mytag := class(tag){}
- Guarda el archivo de Verse y haz clic en Compilar secuencias de comandos de Verse en la barra de herramientas de UEFN para compilar el código y poder usar la 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", donde "family" es el identificador más amplio de la jerarquía y "species", 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 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 botón.
-
En el panel de detalles, haz clic en Agregar 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 agrega la etiqueta de juego. En este ejemplo, se agrega mytag 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, se llama a GetCreativeObjectsWithTag(mytag{})
y, como resultado, TaggedDevices
contiene todos los actores que tienen asignada la etiqueta mytag:
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 la función devolverá 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 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 Botón a una clase customizable_light_device
, porque un dispositivo Botón y un dispositivo 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 customizable_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]):
# Si el actor etiquetado es un dispositivo de luz personalizable, apágalo.
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# Si el actor etiquetado es un dispositivo de barrera, apágalo.
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 controlar los actores en un orden específico, tienes que 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.
# Busca todos los actores con la etiqueta all_tag.
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Imprime la posición de todos los actores creative_prop actors con la etiqueta all_tag.
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Utilería encontrada con all_tag en la posición: {Prop.GetTransform().Translation}")
# Imprime la posición de todos los actores de dispositivos con la etiqueta all_tag.
for (Device:AllCreativeObjects):
if (Device := creative_device_base[Device]):
Print("Dispositivo del modo Creativo encontrado con all_tag en la posición: {Device.GetTransform().Translation}")
# Imprime la posición de todos los actores de dispositivos creados por Verse con la etiqueta all_tag.
for (VerseAuthoredDevice : AllCreativeObjects):
if (VerseAuthoredDevice := creative_device[VerseAuthoredDevice]):
Print("Dispositivo creado por el usuario encontrado con all_tag en la posición: {VerseAuthoredDevice.GetTransform().Translation}")
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.