Las plataformas que desaparecen cuando aterrizas en ellas constituyen un elemento básico de los modos de juego de plataformas, como las carreras de obstáculos. El jugador debe actuar con rapidez y planificar por dónde va para no caer.
A través de este tutorial, aprenderás a crear una plataforma en Unreal Editor para Fortnite (UEFN) con Verse, la cual desaparece cuando el jugador la toca y reaparece unos segundos más tarde. Este ejemplo muestra cómo crear un área en la que el jugador debe saltar de plataforma en plataforma para evitar caer. La secuencia de comandos completa se incluye al final de esta guía como referencia.

Función del lenguaje Verse utilizada
spawn: la expresiónspawnse utiliza para llamar a la función asíncrona que hace que la plataforma reaparezca después de unos segundos.
API de Verse utilizadas
-
Sleep(): la API deSleep()se utiliza para insertar los retrasos entre la desaparición de la plataforma y su reaparición después de un tiempo aleatorio. -
GetRandomFloat(): la API deGetRandomFloat()se utiliza para calcular un tiempo aleatorio antes de la reaparición de la plataforma. -
Propiedades editables: hay cuatro propiedades expuestas a UEFN, tres flotantes para controlar los retrasos de desaparición y reaparición de la plataforma y la propia referencia de la plataforma.
-
Eventos de dispositivos: utiliza el
TriggeredEventdel dispositivo Activador para saber cuando un jugador aterriza en la plataforma.
Cómo configurar el nivel
Este tutorial utiliza la plantilla inicial de Verse como punto de partida. Para empezar, inicializa un nuevo proyecto a partir del ejemplo de función Dispositivo de Verse.
Este ejemplo utiliza los siguientes elementos y dispositivos.
-
Un dispositivo Plataforma de aparición de jugador: Este dispositivo establece dónde aparecerá el jugador al inicio de la partida.
-
Cuatro dispositivos Elemento del modo Creativo: los elementos del modo Creativo tienen varios comportamientos que puedes llamar con Verse, como
Hide()yShow()para alternar la visibilidad y colisión de la plataforma. Este tutorial utiliza la plataforma flotante aérea A como plataforma interactiva con el jugador, pero puedes cambiarla para adaptarla a las necesidades de tu experiencia. -
Cuatro dispositivos Activador: Utilizarás estos activadores para saber cuándo un jugador aterriza en cada plataforma.
Sigue estos pasos para configurar tu nivel:
-
Añade una plataforma flotante aérea A a tu escena. Colócala sobre el suelo para que el jugador se caiga si no salta de la plataforma que desaparece a tiempo. Nombra al dispositivo RecyclePlatform en el esquematizador.
-
Añade un dispositivo Activador a tu escena y configúralo como hijo de tu RecyclePlatform. Colócalo encima de la plataforma y cambia su tamaño para que quepa en toda la plataforma. En el esquematizador, desactiva Visible en partida y establece Veces que puede activarse a 1.
-
Coloca el dispositivo Plataforma de aparición de jugador en la plataforma. Aquí es donde el jugador aparecerá cuando comience la partida. En el esquematizador, desactiva la opción Visible en partida para que el jugador no pueda apoyarse en la plataforma de aparición después de aparecer. Tu configuración completa debería tener el siguiente aspecto:
Cómo crear el dispositivo
Este ejemplo utiliza un dispositivo de Verse para definir el comportamiento y crear una plataforma que desaparece cuando el jugador aterriza en ella y reaparece unos segundos después. Sigue estos pasos para crear el dispositivo con Verse.
-
Crea un nuevo dispositivo de Verse denominado disappear_on_touch_platform con el explorador de Verse. Para aprender a crear un dispositivo nuevo en Verse, consulta Cómo crear tu propio dispositivo con Verse.
-
Arrastra el dispositivo disappear_on_touch_platform desde el explorador de contenido hasta el nivel.
Cómo editar las propiedades del dispositivo en UEFN
Esta sección muestra cómo exponer cuatro propiedades del dispositivo a UEFN para que puedas personalizarlas en el editor:
-
Una referencia de dispositivo al elemento del modo Creativo que colocaste en el nivel.
-
Una constante de
float, denominadaDisappearDelay, para almacenar el tiempo de espera después de que el jugador toque la plataforma antes de ocultarla. -
Dos constantes de
float, denominadasDelayMinyDelayMax, para almacenar el tiempo de espera mínimo y máximo antes de hacer reaparecer la plataforma. Estos dos valores definen el rango permitido al obtener un número aleatorio.
Sigue estos pasos para exponer estas propiedades desde el dispositivo disappear_on_touch_platform que creaste en la sección anterior.
-
Abre el explorador de Verse y haz doble clic en disappear_on_touch_platform.verse para abrir la secuencia de comandos en Visual Studio Code.
-
En la definición de la clase
disappear_on_touch_platform, añade estos campos:-
Un
floateditable denominadoDisappearDelay. Tiempo que hay que esperar después de que el jugador toque la plataforma antes de ocultarla. Inicializa este valor a1.0o un segundo.# Tiempo que hay que esperar después de que el jugador toque la plataforma antes de ocultarla. @editable DisappearDelay:float = 1.0 -
Un
floateditable denominadoDelayMin. Tiempo de espera mínimo antes de hacer reaparecer la plataforma. Inicialízalo a3.0o tres segundos.# Tiempo de espera mínimo antes de hacer reaparecer la plataforma. @editable DelayMin:float = 3.0 -
Un
floateditable denominadoDelayMax. Tiempo de espera máximo antes de hacer reaparecer la plataforma. Inicialízalo a4.0o cuatro segundos.# Tiempo de espera máximo antes de hacer reaparecer la plataforma. @editable DelayMax:float = 4.0 -
Un
creative_propeditable denominadoDisappearingPlatform. Representa una plataforma dentro del nivel que desaparecerá y aparecerá periódicamente. Como tu código aún no tiene una referencia a este objeto en el nivel, lo instanciarás con un arquetipocreative_prop{}vacío. Más adelante asignarás esta referencia a tu plataforma flotante.# Referencia a la plataforma en el nivel. @editable DisappearingPlatform:creative_prop = creative_prop{} -
Un
trigger_deviceeditable denominadoPlatformTrigger. Necesitarás el eventoTriggeredEventde este dispositivo para saber cuándo un jugador aterriza en la plataforma.# Zona en la que entra un jugador al aterrizar en la plataforma. @editable PlatformTrigger:trigger_device = trigger_device{}
-
-
Tus campos de clase
disappear_on_touch_platformahora deberían parecerse a esto:# Dispositivo del modo Creativo creado con Verse que puede colocarse en un nivel. disappear_on_touch_platform := class(creative_device): # Tiempo que hay que esperar después de que el jugador toque la plataforma antes de ocultarla. @editable DisappearDelay:float = 1.0 # Tiempo de espera mínimo antes de hacer reaparecer la plataforma. @editable DelayMin:float = 3.0 # Tiempo de espera máximo antes de hacer reaparecer la plataforma. @editable DelayMax:float = 4.0 # Referencia a la plataforma en el nivel. @editable DisappearingPlatform:creative_prop = creative_prop{} # Zona en la que entra un jugador al aterrizar en la plataforma. @editable PlatformTrigger:trigger_device = trigger_device{}Es útil utilizar el atributo
@editablepara exponer valores comoToggleDelayal editor desde tus secuencias de comandos. Esto te permite personalizar sus valores en UEFN sin tener que volver a compilar el código de Verse cada vez, por lo que puedes iterar rápidamente y buscar valores que se ajusten a tu experiencia de juego. -
Guarda la secuencia de comandos en Visual Studio Code.
-
En la barra de herramientas de UEFN, haz clic en Verse y, a continuación, en Compilar código de Verse para actualizar el dispositivo disappear_on_touch_platform que hay en el nivel.
-
En el panel Esquematizador en UEFN, selecciona el dispositivo disappear_on_touch_platform para abrir su panel de detalles.
-
En el panel Detalles, en Desaparecer al tocar la plataforma, establece Plataforma en RecyclePlatform (el elemento del modo Creativo que has añadido al nivel) haciendo clic en el selector de objetos y seleccionando el dispositivo de plataforma en el visor.

-
Ahora que tienes un elemento al que hace referencia tu dispositivo de Verse, selecciona ambos dispositivos y duplícalos varias veces en el nivel para crear una serie de plataformas entre las que pueda saltar el jugador. Cada nuevo dispositivo que crees debe hacer referencia a su propia plataforma.
Cómo mostrar y ocultar la plataforma
Ahora que has configurado el nivel y los dispositivos, puedes añadir la funcionalidad de mostrar y ocultar la plataforma cuando un jugador aterrice en ella. Sigue estos pasos para añadir este comportamiento a la clase disappear_on_touch_platform:
-
La clase
creative_proptiene dos métodos para cambiar su visibilidad:Show()yHide(). De vuelta en Visual Studio Code, enOnBegin(), llama aHide()y luego aShow()en tuDisappearingPlatform.# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void= # Oculta la plataforma. DisappearingPlatform.Hide() # Muestra la plataforma. DisappearingPlatform.Show()Si ejecutas este código, no verás que la plataforma desaparece y reaparece porque las llamadas
Hide()yShow()se producen inmediatamente una después de la otra. -
Para hacer que la plataforma permanezca más tiempo en un estado visible/invisible, puedes añadir un retraso entre las llamadas
Hide()oShow()medianteSleep(). La funciónSleep()suspende la ejecución de una rutina, y tú especificas la cantidad de tiempo (en segundos) para suspender la ejecución pasando un argumento defloata la función. Llama aSleep()antes de cada llamada aHide()yShow(), pasando elDisappearDelayque definiste antes.# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void= # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Oculta la plataforma. DisappearingPlatform.Hide() # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Muestra la plataforma. DisappearingPlatform.Show()Si ejecutas este código, la plataforma será invisible durante 1 segundo (la cantidad definida por
DisappearDelay) antes de que se haga visible para el resto de la partida.Solo es posible llamar a la función
Sleep()en un contexto asíncrono. Como el métodoOnBegin()ya tiene el especificadorsuspends, lo que significa que es un contexto asíncrono, no necesitas hacer nada más. Para obtener más información sobre el especificadorsuspends, consulta Especificadores y atributos. -
Modificar el tiempo que tarda la plataforma en reaparecer puede hacer el juego más interesante. En lugar de proporcionar el mismo valor a
Sleep()cada vez, puedes obtener un número aleatorio de segundos con la funciónGetRandomFloat()y pasar su valor aSleep().-
En la parte superior del archivo, añade
using { /Verse.org/Random }para usar la funciónGetRandomFloat().using { /Fortnite.com/Devices } using { /Verse.org/Random } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } # Consulta https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse para aprender a crear un dispositivo Verse. # Dispositivo del modo Creativo creado con Verse que puede colocarse en un nivel. disappear_on_touch_platform := class(creative_device): -
Utiliza la función
GetRandomFloat()como argumento paraSleep()cuando decidas cuánto tiempo esperar antes de hacer reaparecer la plataforma, y establece el rango de segundos permitido conDelayMinyDelayMax.# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void= # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Oculta la plataforma. DisappearingPlatform.Hide() # Espera entre DelayMin y DelayMax segundos. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Muestra la plataforma. DisappearingPlatform.Show()
Ahora la plataforma esperará
1.0segundos antes de desaparecer y reaparecerá entre3.0y4.0segundos después. -
Cómo detectar el aterrizaje del jugador en la plataforma
Para poder detectar cuando el jugador aterriza en la plataforma, puedes suscribirte al evento TriggeredEvent que expone la clase trigger_device. El activador solo envía el TriggeredEvent cuando un jugador lo pisa. Como has configurado Veces que puede activarse en 1, esto significa que tienes que llamar a Reset() en el activador para restablecer su estado y permitir que envíe TriggeredEvent de nuevo.
Sigue estos pasos para detectar cuando el jugador toca la plataforma, y utiliza el código que escribiste en la sección anterior para hacer que la plataforma se oculte y reaparezca en respuesta.
-
TriggeredEventrequiere una firma de la función con unplayeropcional como parámetro yvoidcomo tipo de valor de retorno. El agente es opcional en esta función ya que también se pueden activar los dispositivos Activador a través de código, por lo que es necesario comprobar si un jugador fue el que lo activó. Añade un nuevo método a la clasedisappear_on_touch_platformdenominadoOnPlayerTouch().OnPlayerTouch(ActivatingPlayer:?agent):void= -
En
OnPlayerTouch(), en una expresiónif, intenta obtener el jugador de la opciónActivatingPlayer. Si esta llamada tiene éxito, sabrás que un jugador accionó el activador, en lugar de un código.OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("¡Un jugador ha tocado una plataforma!") -
En
OnBegin(), suscríbete aPlatformTrigger.TriggeredEventparaPlatformmedianteOnPlayerTouchcomo controlador de eventos. Ahora, cada vez que un jugador aterrice en una plataforma, se activará elTriggeredEventy se ejecutaráOnPlayerTouch().OnBegin<override>()<suspends>:void= # Suscríbete al TriggeredEvent de PlatformTrigger para saber # cuando un jugador aterriza en la plataforma. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) -
Cuando la plataforma está oculta, los jugadores no deberían poder activar el activador, ya que deberían pasar justo por la plataforma. Para gestionarlo, en
OnBegin(), añade llamadas aPlatformTrigger.Disable()yEnable()después deHide()yShow()respectivamente. Ahora no se podrá interactuar con el activador mientras la plataforma esté oculta.OnBegin<override>()<suspends>:void= # Suscríbete al TriggeredEvent de PlatformTrigger para saber # cuando un jugador aterriza en la plataforma. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Oculta la plataforma y deshabilita el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera entre DelayMin y DelayMax segundos. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Muestra la plataforma y habilita el activador. DisappearingPlatform.Show() PlatformTrigger.Enable()
Aunque hay que ocultar la plataforma cuando un jugador aterriza en ella, no puedes añadir el código para ocultar y mostrar la plataforma directamente al método OnPlayerTouch(). La función Sleep() solo puede ser llamada en un contexto asíncrono, y no puedes añadir el especificador suspends a OnPlayerTouch() porque TriggeredEvent no permite funciones asíncronas como su controlador de eventos. En su lugar, puedes utilizar spawn para llamar a una función asíncrona desde OnPlayerTouch(). Sigue estos pasos para añadir tu función asíncrona.
-
Añade un nuevo método a la definición de clase
disappear_on_touch_platformdenominadoRecyclePlatform(). Añade el modificador<suspends>para permitir que este código se ejecute de forma asíncrona, y mueve el código para ocultar y mostrar la plataforma y el activador desdeOnBeginhasta el bloque de códigoRecyclePlatform().# Oculta la plataforma y reinicia el PlatformTrigger. Espera un tiempo aleatorio y vuelve a activar la visibilidad de la plataforma. RecyclePlatform()<suspends> : void = # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Oculta la plataforma y deshabilita el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera entre DelayMin y DelayMax segundos. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Muestra la plataforma y habilita el activador. DisappearingPlatform.Show() PlatformTrigger.Enable() -
En
OnPlayerTouch(), llama aspawn{}enRecyclePlatform()para ejecutar el código de forma asíncrona. Tu funciónRecyclePlatform()completa debería tener el siguiente aspecto:# Se ejecuta cuando un jugador aterriza en la plataforma. Llama a RecyclePlatform() para ocultar la plataforma # y restablecer el estado del activador. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("¡Un jugador ha tocado una plataforma!") spawn{ RecyclePlatform() }Si ejecutas este código, la plataforma desaparecerá y luego reaparecerá cuando el jugador aterrice por primera vez en la plataforma.
Asíncrono sugiere que un fragmento de código puede tardar en completarse. En este caso, por ejemplo, el reciclaje de la plataforma tarda unos segundos debido a todas las llamadas a
Sleep(). Las funciones asíncronas permiten realizar operaciones sin bloquear la ejecución del código que llama a la función asíncrona. Para obtener más información sobre los contextos asíncronos y la expresiónspawn, consulta Simultaneidad. -
En este punto,
TriggeredEventsolo se envía la primera vez que el jugador aterriza en la plataforma. Para volver a activar el evento, puedes llamar a reiniciar el activador. EnRecyclePlatform(), llama aReset()enPlatformTriggerdespués de llamar aEnable().# Oculta la plataforma y reinicia el PlatformTrigger. Espera un tiempo aleatorio y vuelve a activar la visibilidad de la plataforma. RecyclePlatform()<suspends> : void = # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Oculta la plataforma y deshabilita el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera entre DelayMin y DelayMax segundos. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Muestra la plataforma y habilita el activador. DisappearingPlatform.Show() PlatformTrigger.Enable() # Reinicia el número de veces que se puede activar el PlatformTrigger. PlatformTrigger.Reset() -
Guarda la secuencia de comandos, haz clic en Verse y, a continuación, en Compilar código de Verse para compilar el código.
-
Haz clic en Abrir sesión en la barra de herramientas de UEFN para poner a prueba el nivel.
-
Cuando hagas la prueba de juego en tu nivel ahora, la plataforma desaparecerá cuando el jugador aterrice en ella y reaparecerá unos segundos después.

Secuencia de comandos completa
El siguiente código es la secuencia de comandos completa para hacer desaparecer una plataforma cuando el jugador aterriza en ella y reaparecer después de unos segundos.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Consulta https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse para aprender a crear un dispositivo Verse.
# Dispositivo del modo Creativo creado con Verse que puede colocarse en un nivel.
disappear_on_touch_platform := class(creative_device):
# Tiempo que hay que esperar después de que el jugador toque la plataforma antes de ocultarla.
@editable
DisappearDelay:float = 1.0
# Tiempo de espera mínimo antes de hacer reaparecer la plataforma.
@editable
DelayMin:float = 3.0
# Tiempo de espera máximo antes de hacer reaparecer la plataforma.
@editable
DelayMax:float = 4.0
# Referencia a la plataforma en el nivel.
@editable
DisappearingPlatform:creative_prop = creative_prop{}
# Zona en la que entra un jugador al aterrizar en la plataforma.
@editable
PlatformTrigger:trigger_device = trigger_device{}
# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución
OnBegin<override>()<suspends>:void=
# Suscríbete al TriggeredEvent de PlatformTrigger para saber
# cuando un jugador aterriza en la plataforma.
PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)
# Se ejecuta cuando un jugador aterriza en la plataforma. Llama a RecyclePlatform() para ocultar la plataforma
# y restablecer el estado del activador.
OnPlayerTouch(ActivatingPlayer:?agent):void=
if:
Player := ActivatingPlayer?
then:
Print("¡Un jugador ha tocado una plataforma!")
spawn{ RecyclePlatform() }
# Oculta la plataforma y reinicia el PlatformTrigger. Espera un tiempo aleatorio y vuelve a activar la visibilidad de la plataforma.
RecyclePlatform()<suspends> : void =
# Espera DisappearDelay segundos.
Sleep(DisappearDelay)
# Oculta la plataforma y deshabilita el activador.
DisappearingPlatform.Hide()
PlatformTrigger.Disable()
# Espera entre DelayMin y DelayMax segundos.
Sleep(GetRandomFloat(DelayMin, DelayMax))
# Muestra la plataforma y habilita el activador.
DisappearingPlatform.Show()
PlatformTrigger.Enable()
# Reinicia el número de veces que se puede activar el PlatformTrigger.
PlatformTrigger.Reset()
Por tu cuenta
Al completar este tutorial, habrás aprendido a crear un dispositivo con Verse que hace que una plataforma desaparezca cuando el jugador aterriza en ella y reaparezca unos segundos después.
Con lo que has aprendido, intenta lo siguiente:
-
Juega con los tamaños y las posiciones de las plataformas para crear un reto interesante.
-
En este ejemplo el jugador no anota ningún punto y no pasa nada cuando se cae. ¿Se te ocurre cómo implementar un sistema de puntuación y una condición de derrota?