Si conoces el vínculo directo de evento, el concepto de eventos y las funciones con las que ya has trabajado con dispositivos del modo Creativo también están disponibles en Verse. Puedes usar Verse para programar tus propias funciones y comportamientos que se ejecutan cuando se producen eventos.
En las secciones siguientes se describen las distintas formas en que puedes trabajar con los eventos de dispositivos del modo Creativo en Verse y programar tu propia lógica.
Cómo vincular funciones a eventos de dispositivos del modo Creativo
Puedes suscribirte a los eventos que los dispositivos del modo Creativo exponen en su API. Por ejemplo, la clase del dispositivo Botón button_device
expone InteractedWithEvent
, que se produce cuando un jugador interactúa con el dispositivo Botón. Puedes llamar a Subscribe()
en el evento y pasar el identificador de la función a la que quieres llamar cada vez que se notifique el evento.
La suscripción permite especificar una función a la que llamar cuando se notifica un evento, lo que se conoce como vinculación a un evento. La función de vinculación recibe el nombre de controlador. En el ejemplo a continuación, el controlador es OnButtonInteractedWith
.
Dependiendo de la definición del evento, la firma de la función debe coincidir con lo que el evento espera llamar. Por ejemplo, suscribirse al evento InteractedWithEvent
para el dispositivo button_device
requiere una función con un parámetro de tipo agent
, por lo que la función OnButtonInteractedWith
debería tener el siguiente aspecto:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
@editable
MyButtonDevice:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Vincula la función OnButtonInteractedWith al InteractedWithEvent del dispositivo Botón.
MyButtonDevice.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
OnButtonInteractedWith(InAgent:agent):void=
Print("Un jugador ha interactuado con el botón.")
Cuando se llama a Subscribe()
en un evento de dispositivo, la función devuelve un resultado cancelable
. Llamar a Cancel()
en una variable cancelable
anula la suscripción a la función que controla el evento, de modo que ya no se llamará a la función cuando se notifique el evento.
Si deseas almacenar un único resultado cancelable
puedes utilizar un contenedor como una option
. No puedes crear directamente una variable cancelable
, pero puedes configurar una variable option
para que contenga el resultado de una suscripción.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
spawner_button := class(creative_device):
@editable
Button:button_device = button_device{}
# Contenedor para almacenar la suscripción a eventos
var ButtonSubscription:?cancelable = false
OnBegin<override>()<suspends>:void=
ButtonSubscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
# Establece el resultado `cancelable` como el valor en la variable de `option`.
set ButtonSubscription = option{Subscription}
Print("Suscrito a InteractedWithEvent del botón y suscripción establecida en ButtonSubscription.")
OnButtonInteractedWith(InPlayer:agent):void=
Print("Un jugador ha interactuado con el botón.")
# Accede a la variable cancelable para la suscripción a InteractedWithEvent.
if(CancelableResult := ButtonSubscription?):
CancelableResult.Cancel()
Print("Se ha cancelado este InteractedWithEvent.")
Si tu dispositivo de Verse tiene varias suscripciones a eventos, conviene utilizar un contenedor como una matriz para almacenar todos los resultados cancelable
de cada suscripción a eventos para que puedas cancelarlos más tarde. Como Subscribe()
devuelve un resultado cancelable
, puedes establecer los valores de tu matriz cancelable
cuando te suscribas por primera vez a los eventos.
Ejemplo de generación de un objeto cuando el jugador pulsa el botón

En esta sección, aprenderás a crear un generador de objetos que genera su objeto cuando el jugador interactúa con un botón.
- Empieza colocando un dispositivo Generador de objetos y un dispositivo Botón en tu nivel. Si deseas información sobre cómo colocar dispositivos en tu nivel, consulta Colocación de objetos en Controles de UEFN para usuarios del modo Creativo.
- Establece qué objeto se generará en el dispositivo Generador de objetos. Consulta Dispositivo Generador de objetos para obtener más información al respecto.
- Crea un dispositivo de Verse con propiedades editables para el dispositivo Botón y el dispositivo Generador de objetos. Consulta Cómo añadir una referencia de Verse a un dispositivo del modo Creativo en tu nivel.
- Añade una variable de matriz
cancelable
al dispositivo Botón para realizar un seguimiento de todas sus suscripciones. - Suscríbete al
InteractedWithEvent
, convierte el resultado en unaoption
, y asígnala a la variableButtonSubscription
. - En el controlador de eventos del
InteractedWithEvent
, llama aItemSpawner.SpawnItem()
. A continuación cancela la suscripción accediendo al valor dentro de la opciónButtonSubscription
y llamando aCancel()
. - A continuación se muestra el código completo de Verse para generar un objeto cuando el jugador interactúa con el dispositivo Botón. Si interactúas con el botón por segunda vez, no aparecerá otro objeto.
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } spawner_button := class(creative_device): @editable Button:button_device = button_device{} @editable ItemSpawner:item_spawner_device = item_spawner_device{} # Contenedor para almacenar la suscripción a eventos var ButtonSubscription:?cancelable = false OnBegin<override>()<suspends>:void= Subscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith) # Añade el resultado cancelable a un lugar de la matriz Subscriptions. set ButtonSubscription = option{Subscription} Print("Suscrito a InteractedWithEvent del botón y suscripción establecida en ButtonSubscription.") OnButtonInteractedWith(InPlayer:agent):void= ItemSpawner.SpawnItem() # Accede a la variable cancelable para la suscripción a InteractedWithEvent. if(CancelableResult := ButtonSubscription?): CancelableResult.Cancel() Print("Se ha cancelado este InteractedWithEvent.")
Inicia tu juego e interactúa con el botón para generar un objeto. Como has cancelado el
InteractedWithEvent
, el botón debería generar un objeto solo una vez.
Consulta el tutorial Puzle de luces marcadas para obtener un ejemplo de juego que utiliza una suscripción a este dispositivo y la cancela.
Cómo esperar un evento de dispositivo del modo Creativo
Puedes suscribirte a eventos, pero hay otra forma de esperar a que se produzca un evento. Puedes llamar a Await()
en un evento de dispositivo del modo Creativo, que es una llamada a una función asíncrona y puede tardar en completarse. Esto significa que debes utilizarla dentro de un contexto asíncrono, como una expresión de simultaneidad o una función con el especificador suspends
. Para obtener más información sobre la simultaneidad, consulta Flujo de tiempo y simultaneidad.
En el siguiente ejemplo, el dispositivo de Verse espera a que el jugador interactúe con el dispositivo Activador antes de que ocurra cualquier otra cosa. Si interactúa con cualquiera de los dispositivos Botón antes que con el dispositivo Activador, no ocurrirá nada. Después de que el jugador interactúe con el dispositivo Activador, deberá tomar una decisión y elegir entre los dos botones. Solo puede interactuar con uno de los botones y una vez únicamente para que ocurra algo, dado que el código utiliza una expresión race
para competir entre los dos eventos de los botones. Para obtener más información sobre cómo funciona esta expresión de simultaneidad, consulta Race.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
make_a_choice_device:= class(creative_device):
@editable
MakeChoice:trigger_device = trigger_device{}
@editable
RedButton:button_device = button_device{}
@editable
BlueButton:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Esto espera a que el jugador pise el activador y evita que cualquier otro código se ejecute aquí hasta que esto suceda.
# Esto significa que si el jugador interactúa con los dos dispositivos de botón, no ocurrirá nada hasta que se produzca este evento.
MakeChoice.TriggeredEvent.Await()
Print("Toma una decisión: pulsa el botón rojo y quédate en el país de las maravillas o pulsa el botón azul y despierta de nuevo en tu cama.")
# Ambas expresiones de bloque se ejecutan al mismo tiempo en esta expresión race.
# Si el jugador interactúa con uno de los botones, se cancelará la espera de interacción con el otro botón.
# Esto significa que el jugador solo puede interactuar con uno de los dispositivos Botón.
race:
block:
RedButton.InteractedWithEvent.Await()
Print("Has decidido quedarte en el país de las maravillas.")
block:
BlueButton.InteractedWithEvent.Await()
Print("Has decidido despertarte en tu cama.")
# Si el jugador interactúa con alguno de los dispositivos en esta fase, no sucederá nada porque solo hemos esperado a que los eventos se produzcan una vez.
Estos eventos solo esperan una vez. Si quieres repetir la espera de estos eventos, puedes utilizar una expresión loop
para repetir esta lógica tantas veces como quieras.
Siguiente paso: Módulo de dispositivos
En este tutorial has aprendido a trabajar con generadores de objetos y botones, pero existen muchos más dispositivos del modo Creativo a los que puedes subscribirte y utilizar desde tu propio dispositivo. Puedes encontrar esta información en la referencia API de Verse. Ve al módulo Dispositivos para ver todos los dispositivos del modo Creativo con los que puedes trabajar en Verse.