Con las etiquetas de jugabilidad, puedes encontrar a actores marcados con una etiqueta específica mientras el juego está en marcha. Las etiquetas de jugabilidad te permiten trabajar con varios actores sin necesidad de configurar propiedades y asignar referencias en Unreal Editor para Fortnite (UEFN). Las etiquetas de jugabilidad se crean en código Verse y se asignan en UEFN.
El uso de etiquetas de jugabilidad puede abrir interesantes oportunidades de juego, como:
- Alterar la configuración del nivel sin tener que añadir o modificar referencias de dispositivo a tu dispositivo diseñado con Verse.
- Encontrar todos los actores con una etiqueta específica y hacerlos funcionar según su tipo, como encender luces o activar barreras.
- Cambiar dinámicamente qué actores están activos a medida que el jugador avanza en el juego.
- Habilitar condicionalmente actores para una carrera de obstáculos en función de una opción de dificultad seleccionada por el jugador.
¿Qué se puede etiquetar?
Actualmente, se pueden asignar etiquetas de jugabilidad a lo siguiente:
Las siguientes secciones muestran cómo crear y trabajar con etiquetas de jugabilidad en el proyecto.
Cómo crear una etiqueta de jugabilidad
Sigue estos pasos para asignar una nueva etiqueta de jugabilidad usando Verse.
- Abre tu archivo de Verse en Visual Studio Code con el explorador de Verse.
- En la parte superior de tu archivo de Verse, añade el siguiente código para permitir la referencia a la clase
tag
.using { /Verse.org/Simulation/Tags }
- Crea una nueva clase que herede de la clase
tag
. El nombre de tu clase determina el nombre de la etiqueta. En este ejemplo, la clase se llamamytag
, por lo que el nombre de la etiqueta de jugabilidad es mytag.# Deriva de la clase `tag` en el módulo Verse.org/Simulation/Tags para crear una nueva etiqueta de jugabilidad. mytag := class(tag){}
- Tu archivo de Verse debería tener el siguiente aspecto:
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 jugabilidad. 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 utilizar tu nueva etiqueta de jugabilidad.
Las etiquetas de jugabilidad son jerárquicas. Estas etiquetas pueden tener cualquier número de niveles jerárquicos, separados por el carácter _
en el nombre de la clase.
Cuando el nombre de la etiqueta de jugabilidad aparece en el editor, los caracteres _
se convierten en «.».
Por ejemplo, una etiqueta de jugabilidad con tres niveles tendría el nombre de clase familia_género_especie
y aparecería en el editor como «familia.género.especie», siendo «familia» el identificador más amplio de la jerarquía y «especie» el más específico.
Ten en cuenta que la existencia de las etiquetas de jugabilidad «familia.género.especie» no implica que también existan las etiquetas de jugabilidad «familia.género» y «familia». Debes crear estas etiquetas de jugabilidad en Verse con los nombres de clase familia
y familia_género
para crear los niveles jerárquicos.
Asignación de una etiqueta de jugabilidad
Sigue estos pasos para asignar una etiqueta de jugabilidad. Este ejemplo utiliza un dispositivo, pero los pasos son los mismos para otros actores.
-
En UEFN, en el esquematizador, selecciona el dispositivo que quieras etiquetar para abrir su panel de detalles. En este ejemplo, el dispositivo es un dispositivo Botón.
-
En el panel Detalles, haz clic en Añadir nuevo componente y elige Marcado de etiquetas de Verse en el desplegable.
-
Selecciona el componente VerseTagMarkup para ver su configuración en el panel Detalles.
-
En Etiquetas de jugabilidad edita la propiedad Etiquetas y añade la etiqueta de jugabilidad. En este ejemplo, se añade mytag al dispositivo.
Se pueden añadir varias etiquetas al mismo actor, por lo que cada actor puede pertenecer a varios grupos al mismo tiempo. Cuando tengas un actor con varias etiquetas, podrás encontrarlo por cualquiera de las etiquetas que tenga.
Por ejemplo, un actor con las etiquetas mytag1 y mytag2 se encontrará al llamar a GetCreativeObjectsWithTag(mytag1{})
o GetCreativeObjectsWithTag(mytag2{})
.
Cómo encontrar actores con una etiqueta de jugabilidad
Una vez que tengas actores con etiquetas de jugabilidad asignadas, puedes encontrarlos por etiqueta de jugabilidad durante una partida utilizando la función de Verse GetCreativeObjectsWithTag()
. En el siguiente ejemplo, al llamar a GetCreativeObjectsWithTag(mytag{})
se obtiene TaggedDevices
, que contiene todos los actores que tienen mytag asignada:
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 Botón como a un dispositivo Luz personalizable en el nivel, esta llamada a la función devolvería ambos dispositivos.
Puedes convertir el resultado de GetCreativeObjectsWithTag()
en una de sus clases de implementación (lo que se denomina casting de tipo) utilizando 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 conversión de tipos es una expresión falible porque fallará si el dispositivo no puede convertirse a ese tipo, por ejemplo, si se trata de un tipo de dispositivo diferente. Por ejemplo, no puedes convertir un dispositivo Botón en 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 filtro y crear nuevas variables para utilizarlas en el bloque de código for
. Por ejemplo, puedes añadir la conversión de tipo de customizable_light_device
a la expresión de iteración en for
. Como 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()
El siguiente ejemplo muestra cómo comprobar condicionalmente el tipo de actor y llamar a diferentes funciones teniéndolo en cuenta. El ejemplo comprueba si el actor etiquetado es un dispositivo Luz personalizable que puede llamar a TurnOff()
para apagar la luz o si es un dispositivo 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 Luz personalizable, apágalo.
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# Si el actor etiquetado es un dispositivo 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 añadas o elimines actores entre llamadas a GetCreativeObjectsWithTag()
utilizando la misma etiqueta, la lista resultante podría estar en un orden diferente para cada resultado de llamada.
Si tu juego necesita controlar actores en un orden específico, debes utilizar una matriz editable en lugar de etiquetas de jugabilidad, ya que el resultado de GetCreativeObjectsWithTag()
es una lista desordenada de actores.
Cómo encontrar la posición por tipo con etiquetas de jugabilidad
Aquí tienes un ejemplo de cómo filtrar por tipo los actores devueltos por GetCreativeObjectsWithTag()
e imprimir su posición.
# Encuentra todos los actores con all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Imprime la posición de todos los actores de creative_prop con all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Elemento encontrado con all_tag en la posición: {Prop.GetTransform().Translation}")
# Imprime la posición de todos los dispositivos con 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 creados con Verse con all_tag
for (VerseAuthoredDevice : AllCreativeObjects):
if (VerseAuthoredDevice := creative_device[VerseAuthoredDevice]):
Print("Dispositivo de usuario encontrado con all_tag en la posición: {VerseAuthoredDevice.GetTransform().Translation}")
Tutoriales que utilizan etiquetas de jugabilidad
Los siguientes tutoriales muestran cómo utilizar las etiquetas de jugabilidad en un juego.