Si ya conoces cómo funciona la vinculación directa de eventos, el concepto de eventos y funciones con el que acostumbras trabajar en los dispositivos del modo Creativo también se traslada a Verse. Puedes utilizar Verse para codificar tus propias funciones y el comportamiento que se ejecutan cuando ocurre el evento.
En las siguientes secciones, se describen las distintas maneras en las que puedes trabajar con los eventos de los dispositivos del modo Creativo y codificar 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 button_device del dispositivo botón expone a InteractedWithEvent, que ocurre cuando el jugador interactúa con el dispositivo Botón. Puedes llamar a la función Subscribe() en el evento y pasar el identificador de la función a la que deseas llamar cada vez que se produce el evento.
La suscripción te permite especificar una función para llamar cuando se produce un evento, lo que se conoce como vinculación de un evento. La función vinculada se denomina controlador. En el ejemplo siguiente, el controlador es OnButtonInteractedWith.
Según la definición de evento, la firma de la función debe coincidir con lo que se espera que llame el evento. Por ejemplo, suscribirse al evento InteractedWithEvent para button_device requiere obtener una función con un parámetro de tipo agent, por lo que la función OnButtonInteractedWith debería verse de la siguiente manera:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
@editable
MyButtonDevice:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Vincular la función OnButtonInteractedWith con InteractedWithEvent del dispositivo de botón
MyButtonDevice.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
OnButtonInteractedWith(InAgent:agent):void=
Print("El jugador ha interactuado con el botón.")
Cuando llamas a Subscribe() en un evento de dispositivo, la función produce el resultado cancelable. Si llamas a Cancel() en una variable cancelable, se cancela la suscripción de la función que controla el evento, de manera que ya no se llamará a la función cuando se produzca el evento.
Si quieres almacenar un solo resultado cancelable puedes utilizar un contenedor como option. No puedes crear una varible cancelable directamente, pero puedes establecer 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
Buttonn:button_device = button_device{}
# Contenedor para almacenar la suscripción al evento
var ButtonSubscription:?cancelable = false
OnBegin<override>()<suspends>:void=
ButtonSubscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
# Establecer el resultado cancelable como el valor en la variable de opción.
set ButtonSubscription = option{Subscription}
Print("Se suscribió al botón InteractedWithEvent y se registró en ButtonSubscription.")
OnButtonInteractedWith(InPlayer:agent):void=
Print("El jugador ha interactuado con el botón.")
# Acceder a la variable cancelable para la suscripción InteractedWithEvent
if(CancelableResult := ButtonSubscription?):
CancelableResult.Cancel()
Print("Se canceló InteractedWithEvent")
Si el dispositivo de Verse tiene varias suscripciones a eventos, una buena idea es utilizar un contenedor como una matriz para almacenar los resultados cancelable de todas las suscripciones a eventos para poder cancelarlas más adelante. Debido a que Subscribe() produce un resultado cancelable, puedes establecer los valores de la matriz cancelable cuando te suscribes por primera vez a los eventos.
Ejemplo de generación de objetos cuando el jugador presiona el botón

En esta sección, aprenderás a crear un generador de objetos que genere un objeto cuando el jugador interactúe con un botón.
- Para comenzar, coloca un dispositivo generador de objetos y uno de botón en tu nivel. Para saber 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á para el dispositivo generador de objetos. Consulta Generador de objetos para obtener más detalles.
- Crea un dispositivo de Verse con propiedades editables para el dispositivo de botón y el dispositivo generador de objetos. Consulta Cómo agregar una referencia de Verse en un dispositivo del modo Creativo en tu nivel.
- Agrega una variable de opción
cancelableal dispositivo mediante la suscripción al dispositivo botón. - Suscríbete al
InteractedWithEvent, envía el resultado a unaoptiony asígnala a la variableButtonSubscription. - En el controlador de eventos para
InteractedWithEvent, llama aItemSpawner.SpawnItem()Luego cancela la suscripción aInteractedWithEvental acceder al valor dentro de la opciónButtonSubscriptiony llamar aCancel(). - A continuación, se muestra el código completo de Verse para generar un objeto cuando el jugador interactúa con el dispositivo de botón. Si se interactúa con el dispositivo de botón una segunda vez, no se generará otro objeto.
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } spawner_button := class(creative_device): @editable Buttonn:button_device = button_device{} @editable ItemSpawner:item_spawner_device = item_spawner_device{} # Contenedor para almacenar la suscripción al evento var ButtonSubscription:?cancelable = false OnBegin<override>()<suspends>:void= Subscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith) # Agregar el resultado cancelable en un punto de la matriz de suscripciones set ButtonSubscription = option{Subscription} Print("Se suscribió al botón InteractedWithEvent y se registró en ButtonSubscription.") OnButtonInteractedWith(InPlayer:agent):void= ItemSpawner.SpawnItem() # Acceder a la variable cancelable para la suscripción InteractedWithEvent if(CancelableResult := ButtonSubscription?): CancelableResult.Cancel() Print("Se canceló InteractedWithEvent")Inicia el juego e interactúa con el botón para que aparezca un elemento. Como cancelaste
InteractedWithEvent, el botón debe generar un elemento solo una vez.
Consulta el tutorial del puzle de luces combinadas para ver un ejemplo de juego que utiliza la suscripción y cancelación de este dispositivo.
Cómo esperar un evento de un dispositivo del modo Creativo
Puedes suscribirte a los eventos, pero hay otra forma de esperar a que ocurra un evento. Puedes llamar a Await() en un evento de dispositivo del modo Creativo, la cual es una función asíncrona y puede tardar tiempo en completarse. Esto significa que debes usarla dentro de un contexto asíncrono, como una expresión de concurrencia o una función con el especificador suspends. Para saber más acerca de la concurrencia, consulta Flujo de tiempo y concurrencia.
En el ejemplo siguiente, el dispositivo de Verse espera a que el jugador interactúe con el dispositivo activador antes de que pueda ocurrir cualquier otra cosa. Si el jugador interactúa con alguno de los dispositivos de botón antes de hacerlo con el dispositivo activador, no sucederá nada. Después de que el jugador interactúa con el dispositivo activador, debe elegir entre los dos botones. Puede interactuar solo con uno de los botones e interactuar una sola vez con el botón elegido para que algo ocurra, porque el código utiliza una expresión race para ejecutar una carrera entre los dos eventos de botones. Para obtener más detalles sobre cómo funciona esta expresión de concurrencia, consulta Race (carrera).
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=
# Este segmento de código espera a que el jugador pise el activador e impide la ejecución de cualquier otro código aquí hasta que esto suceda.
# Esto significa que si el jugador interactúa con los dos dispositivos de botón, no sucederá nada hasta que ocurra este evento.
MakeChoice.TriggeredEvent.Await()
Print("Elije el botón rojo para quedarte en el país de las maravillas o el botón azul para despertarte en tu cama.")
# Ambas expresiones de bloqueo se ejecutan al mismo tiempo en esta expresión de carrera.
# Cuando el jugador interactúa con uno de los botones, se cancelará la espera de la interacción del otro botón.
# Esto significa que el jugador solo puede interactuar con uno de los dispositivos de botón.
race:
block:
RedButton.InteractedWithEvent.Await()
Print("Elegiste quedarte en el país de las maravillas.")
block:
BlueButton.InteractedWithEvent.Await()
Print("Elegiste despertarte en tu cama.")
# Si el jugador interactúa con alguno de los dispositivos en esta instancia, no sucederá nada porque solo se espera que los eventos ocurran una sola vez.
Estos eventos solo esperan una vez. Si deseas repetir la espera para estos eventos, puedes usar una expresión loop para repetir esta lógica todas las veces que desees.
Próximo paso: módulo de dispositivos
Ya aprendiste a trabajar con los dispositivos de aparición de elementos y los botones, pero existen más dispositivos del modo Creativo que puedes utilizar y a los que puedes suscribirte desde tu propio dispositivo. Puedes encontrar esta información en la referencia de la API de Verse. Ve al módulo de dispositivos para conocer todos los dispositivos del modo Creativo con los que puedes trabajar en Verse.