Con las etiquetas de jugabilidad, puedes buscar 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 el 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 dispositivos a tu dispositivo creado 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.Verseusing { /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.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Tu archivo de Verse debería tener el siguiente aspecto:
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 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 genérico 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 family y family_genus para crear los niveles jerárquicos.
Cómo asignar 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 selecciona 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 tu 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 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 de luz personalizable en el nivel, esta llamada a 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 tipos) utilizando la sintaxis NewObjectReference := object_type_to_cast_to[ObjectReference], en la que 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().
El casting 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 de luz personalizable no son el mismo tipo de dispositivo.
Con las expresiones for, puedes utilizar expresiones falibles como filter 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 de 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]):
# 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 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.
# 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):
Tutoriales que utilizan etiquetas de jugabilidad
Los siguientes tutoriales muestran cómo utilizar las etiquetas de jugabilidad en un juego.
Puzle de luces marcadas
Crea un puzle en el que el jugador tenga que encontrar la combinación correcta de luces encendidas y apagadas para que aparezca un objeto, todo en un dispositivo creado con Verse.