Las plataformas que desaparecen cuando aterrizas en ellas son un elemento básico de los modos de juego de plataformas, como las carreras de obstáculos. Requieren que el jugador actúe con rapidez y planifique por dónde va para no caer.
Con este tutorial, aprenderás cómo crear con Verse en Unreal Editor para Fortnite (UEFN) una plataforma que desaparece cuando el jugador la toca y vuelve a aparecer después de que transcurre un tiempo aleatorio en segundos. 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 de lenguaje de Verse utilizada
spawn: la expresiónspawnse utiliza para llamar a la función asíncrona que hace que la plataforma reaparezca después de que transcurre un tiempo aleatorio en segundos.
Las API usadas en Verse
-
Sleep(): la APISleep()se utiliza para insertar las demoras entre la desaparición de la plataforma y su reaparición después de una cantidad de tiempo aleatoria. -
GetRandomFloat(): la APIGetRandomFloat()se utiliza para calcular una cantidad de tiempo aleatoria antes de la reaparición de la plataforma. -
Editable Properties: se exponen cuatro propiedades a UEFN, tres floats para controlar los retrasos de desaparición y reaparición de la plataforma y la propia referencia de la plataforma.
-
Eventos del dispositivo: usarás el
TriggeredEventdel dispositivo para saber cuándo un jugador aterriza en la plataforma.
Configuración del nivel
Este tutorial usa la plantilla de Verse para principantes como punto de partida. Para empezar, inicializa un nuevo proyecto a partir del ejemplo de Dispositivo de Verse.
En este ejemplo, se utilizan la utilería y los dispositivos que aparecen a continuación.
-
1 x Plataforma de aparición de jugador: Este dispositivo define dónde generar al jugador al comienzo del juego.
-
4 x objetos del modo Creativo: los objetos 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 usa la plataforma aérea flotante A como plataforma que el jugador puede usar para interactuar, pero puedes cambiarla conforme lo requiera tu experiencia. -
4 x dispositivo activador: Usarás los activadores para saber cuándo un jugador aterriza en cada plataforma.
Realiza estos pasos para configurar el nivel:
-
Añade una plataforma aérea flotante A a tu escena. Coloca esto por encima del suelo para que el jugador se caiga si no salta a tiempo de la plataforma que desaparece. En el esquematizador, nombra la plataforma RecyclePlatform.
-
Añade un dispositivo Activador a tu escena y configúralo derivado hijo de tu RecyclePlatform. Colócalo encima de la plataforma y cambia su tamaño para que se ajuste a toda la plataforma. En el esquematizador, establece Visible en partida como Falso y establece Veces que puede activarse a 1.
-
Coloca el dispositivo de aparición de jugador en la plataforma. Aquí es donde el jugador aparecerá cuando el juego comience. En el esquematizador, deshabilita la opción Visible en la partida para que el jugador no pueda pararse en la plataforma de aparición después de aparecer. Tu configuración completa debería verse así:
Cómo crear el dispositivo
Este ejemplo utiliza un dispositivo creado en Verse para definir el comportamiento para crear una plataforma que desaparece cuando el jugador aterriza en ella y vuelve a aparecer después de que transcurre un tiempo aleatorio en segundos. Sigue estos pasos para crear este dispositivo con Verse.
-
Crea un nuevo dispositivo de Verse denominado disappear_on_touch_platform con el explorador de Verse. Para aprender a crear un nuevo dispositivo en Verse, consulta Cómo crear tu propio dispositivo de Verse.
-
Arrastra el dispositivo disappear_on_touch_platform desde el explorador de contenido al nivel.
Cómo editar las propiedades del dispositivo en UEFN
Esta sección muestra cómo exponer cuatro propiedades del dispositivo en UEFN para que puedas personalizarlas en el editor:
-
Una referencia de dispositivo al objeto del modo Creativo que colocaste en el nivel.
-
Una constante
float, denominadaDisappearDelay, para almacenar cuánto tiempo hay que esperar después de que el jugador toque la plataforma antes de ocultarla. -
Dos constantes float, llamadas
DelayMinyDelayMaxque almacenan las cantidades mínima y máxima de tiempo a esperar 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 para abrir la secuencia de comandos en Visual Studio Code.
-
En la definición de la clase
disappear_on_touch_platform, agrega los siguientes campos:-
Un
floateditable denominadoDisappearDelay. Esto es cuánto tiempo se debe esperar para ocultar la plataforma una vez que el jugador la toca. Inicializa este valor en1.0o un segundo.# Cánto tiempo se debe esperar para ocultar la plataforma una vez que el jugador la toca. @editable DisappearDelay:float = 1.0 -
Un
floateditable denominadoDelayMin. Esta es la cantidad mínima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. Inicialízalo en3.0o tres segundos.# La cantidad mínima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. @editable DelayMin:float = 3.0 -
Un
floateditable denominadoDelayMax. Esta es la cantidad máxima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. Inicia esto en4.0o cuatro segundos.# La cantidad máxima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. @editable DelayMax:float = 4.0 -
Un
creative_propeditable denominadoDisappearingPlatform. Esta es la plataforma del nivel que desaparecerá y aparecerá periódicamente. Ya que tu código aún no tiene una referencia a este objeto en el nivel, lo deberás instanciar esto con un arquetipocreative_prop{}vacío. Asignarás esta referencia a tu plataforma flotante más adelante.# 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 cuando un jugador aterrice en la plataforma.# La zona donde un jugador llega al aterrizar en la plataforma. @editable PlatformTrigger:trigger_device = trigger_device{}
-
-
Los campos de la clase
disappear_on_touch_platformahora deberían tener este aspecto:# Un dispositivo del modo Creativo creado por Verse que se puede colocar en un nivel disappear_on_touch_platform := class(creative_device): # Cánto tiempo se debe esperar para ocultar la plataforma una vez que el jugador la toca. @editable DisappearDelay:float = 1.0 # La cantidad mínima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. @editable DelayMin:float = 3.0 # La cantidad máxima de tiempo que se debe esperar antes de hacer reaparecer la plataforma. @editable DelayMax:float = 4.0 # Referencia a la plataforma en el nivel. @editable DisappearingPlatform:creative_prop = creative_prop{} # La zona donde un jugador llega al aterrizar en la plataforma. @editable PlatformTrigger:trigger_device = trigger_device{}Resulta útil 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 en cada ocasión, con lo que podrás iterar rápidamente y buscar valores que funcionen con tu experiencia de juego. -
Guarda tu secuencia de comandos en Visual Studio Code.
-
En la barra de herramientas de UEFN, haz clic en Verse y luego en Compilar código de Verse para actualizar el dispositivo disappear_on_touch_platform que está en el nivel.
-
En el panel del esquematizador en UEFN, selecciona el dispositivo disappear_on_touch_platform para abrir su panel de detalles.
-
En el panel de detalles bajo Plataforma que desaparece al tocarla, establece Platform a RecyclePlatform (el objeto del modo Creativo que agregaste al nivel) al hacer clic en el selector de objetos y seleccionar el dispositivo de plataforma en el visor.

-
Ahora que tienes un objeto referenciado por 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 de Verse que crees debe hacer referencia a su propia plataforma.
Cómo ocultar y mostrar 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. Realiza 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:Hide()yShow(). De vuelta en Visual Studio Code, enOnBegin(), llama aHide()y luego aShow()en tuDisappearingPlatform.# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución OnBegin<override>()<suspends>:void= # Hace invisible la plataforma. DisappearingPlatform.Hide() # Hace visible 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 agregar un retardo entre las llamadas a
Hide()yShow()utilizandoSleep(). 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()con elDisappearDelayque definiste antes.# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución OnBegin<override>()<suspends>:void= # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Hace invisible la plataforma. DisappearingPlatform.Hide() # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Hace visible la plataforma. DisappearingPlatform.Show()Ahora, si ejecutas este código, la plataforma estará invisible durante un segundo (la cantidad definida por
DisappearDelay) antes de que esté visible durante el resto del juego.La función
Sleep()solo se puede llamar en un contexto asíncrono. El métodoOnBegin()ya tiene el especificadorsuspends, lo que significa que es un contexto asíncrono, así que no necesitas hacer nada más. Para obtener más información sobre el especificadorsuspends, consulta Atributos y especificadores. -
Variar 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, agrega
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/es-mx/uefn/create-your-own-device-in-verse para saber cómo crear un dispositivo de Verse. # Un dispositivo del modo Creativo creado por Verse que se puede colocar 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 el dispositivo se inicia en un juego en ejecución OnBegin<override>()<suspends>:void= # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Hace invisible la plataforma. DisappearingPlatform.Hide() # Espera en segundos entre DelayMin y DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Hace visible 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 suscribir al evento TriggeredEvent que expone la clase trigger_device. El activador solo envía el TriggeredEvent cuando un jugador se posa sobre él. Como estableciste Veces que puede activarse a uno, tienes que llamar a Reset() en el activador para restablecer su estado y permitir que envíe el TriggeredEvent de nuevo.
Sigue estos pasos para detectar cuando el jugador toque 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 función opcional conplayercomo parámetro yvoidcomo tipo devuelto. El agente es opcional en esta función, pues también se pueden activar los dispositivos Activadores a través del código, por lo que es necesario comprobar si fue un jugador quien lo activó. Añade un nuevo método a la clasedisappear_on_touch_platformllamadoOnPlayerTouch().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 activó la función el activador y que no fue el código.OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("¡Un jugador tocó una plataforma!") -
En
OnBegin(), suscribe aPlatformTrigger.TriggeredEventconOnPlayerTouchcomo controlador de eventos. Ahora, cada vez que un jugador aterrice en una plataforma,TriggeredEventse activará yOnPlayerTouch()se ejecutará.OnBegin<override>()<suspends>:void= # Suscríbete al TriggeredEvent de PlatformTrigger para saberlo # cuando un jugador aterrice en la plataforma. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) -
Cuando la plataforma esté oculta, los jugadores no deberían poder accionar el activador, ya que deberían atravesar la plataforma. Para gestionar esto, añade llamadas a
PlatformTrigger.Disable()yEnable()enOnBegin()después deHide()andShow(), respectivamente. Ahora no será posible interactuar con tu activador mientras la plataforma esté oculta.OnBegin<override>()<suspends>:void= # Suscríbete al TriggeredEvent de PlatformTrigger para saberlo # cuando un jugador aterrice en la plataforma. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Ocultar la plataforma y deshabilitar el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera en segundos entre DelayMin y DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Mostrar la plataforma y habilitar el activador. DisappearingPlatform.Show() PlatformTrigger.Enable()
Aunque debes ocultar la plataforma cuando un jugador aterrice en ella, no puedes agregar el código para ocultar y mostrar la plataforma directamente al método OnPlayerTouch(). La función Sleep() solo se puede llamar en un contexto asíncrono, y no puedes agregar 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(). Realiza estos pasos para añadir tu función asíncrona.
-
Añade un nuevo método
RecyclePlatform()a la definición de clasedisappear_on_touch_platformAñ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 deOnBeginal bloque de códigoRecyclePlatform().# Ocultar la plataforma y restablecer el PlatformTrigger. Entonces, espera una cantidad arbitraria de tiempo y reactiva para mostrar la plataforma. RecyclePlatform()<suspends> : void = # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Ocultar la plataforma y deshabilitar el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera en segundos entre DelayMin y DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Mostrar la plataforma y habilitar el activador. DisappearingPlatform.Show() PlatformTrigger.Enable() -
En
OnPlayerTouch(), llama aspawn{}enRecyclePlatform()para ejecutar el código de forma asíncrona. La funciónRecyclePlatform()completa debería verse así:# Se ejecuta cuando un jugador aterriza en la plataforma. Llama a RecyclePlatform() para ocultar la plataforma # y restablece el estado del activador. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("¡Un jugador tocó una plataforma!") spawn{ RecyclePlatform() }Si ejecutas este código, la plataforma desaparecerá y luego reaparecerá cuando el jugador aterrice por primera vez en ella.
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 saber más sobre los contextos asíncronos y la expresiónspawn, consulta Concurrencia. -
Actualmente,
ActivatedEventsolo se envía la primera vez que el jugador aterriza en la plataforma. Para que el evento pueda activarse de nuevo, puedes hacer un llamado para restablecerlo. EnRecyclePlatform(), llama aReset()enPlatformTriggerdespués de llamar aEnable().# Ocultar la plataforma y restablecer el PlatformTrigger. Entonces, espera una cantidad arbitraria de tiempo y reactiva para mostrar la plataforma. RecyclePlatform()<suspends> : void = # Espera DisappearDelay segundos. Sleep(DisappearDelay) # Ocultar la plataforma y deshabilitar el activador. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Espera en segundos entre DelayMin y DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Mostrar la plataforma y habilitar el activador. DisappearingPlatform.Show() PlatformTrigger.Enable() # Restablece la cantidad de veces que se puede activar el PlatformTrigger. PlatformTrigger.Reset() -
Guarda la secuencia de comandos y haz clic en Verse y, luego, en Compilar código de Verse para compilar el código.
-
Haz clic en Comenzar sesión en la barra de herramientas de UEFN para realizar una prueba de juego del nivel.
-
Cuando hagas la prueba de juego en tu nivel ahora, cada plataforma debería desaparecer cuando el jugador aterrice y volver a aparecer después de que transcurra un tiempo aleatorio en segundos.

Secuencia de comandos completa
El siguiente código es la secuencia de comandos completa para hacer que una plataforma desaparezca cuando el jugador aterrice y reaparezca después de que transcurra un tiempo aleatorio en segundos.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Consulta https://dev.epicgames.com/documentation/es-mx/uefn/create-your-own-device-in-verse para saber cómo crear un dispositivo de Verse.
# Un dispositivo del modo Creativo creado por Verse que se puede colocar en un nivel
disappear_on_touch_platform := class(creative_device):
# Cánto tiempo se debe esperar para ocultar la plataforma una vez que el jugador la toca.
@editable
DisappearDelay:float = 1.0
# La cantidad mínima de tiempo que se debe esperar antes de hacer reaparecer la plataforma.
@editable
DelayMin:float = 3.0
# La cantidad máxima de tiempo que se debe esperar antes de hacer reaparecer la plataforma.
@editable
DelayMax:float = 4.0
# Referencia a la plataforma en el nivel.
@editable
DisappearingPlatform:creative_prop = creative_prop{}
# La zona donde un jugador llega al aterrizar en la plataforma.
@editable
PlatformTrigger:trigger_device = trigger_device{}
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
OnBegin<override>()<suspends>:void=
# Suscríbete al TriggeredEvent de PlatformTrigger para saberlo
# cuando un jugador aterrice en la plataforma.
PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)
# Se ejecuta cuando un jugador aterriza en la plataforma. Llama a RecyclePlatform() para ocultar la plataforma
# y restablece el estado del activador.
OnPlayerTouch(ActivatingPlayer:?agent):void=
if:
Player := ActivatingPlayer?
then:
Print("¡Un jugador tocó una plataforma!")
spawn{ RecyclePlatform() }
# Ocultar la plataforma y restablecer el PlatformTrigger. Entonces, espera una cantidad arbitraria de tiempo y reactiva para mostrar la plataforma.
RecyclePlatform()<suspends> : void =
# Espera DisappearDelay segundos.
Sleep(DisappearDelay)
# Ocultar la plataforma y deshabilitar el activador.
DisappearingPlatform.Hide()
PlatformTrigger.Disable()
# Espera en segundos entre DelayMin y DelayMax.
Sleep(GetRandomFloat(DelayMin, DelayMax))
# Mostrar la plataforma y habilitar el activador.
DisappearingPlatform.Show()
PlatformTrigger.Enable()
# Restablece la cantidad 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 aterrice y reaparezca después de que transcurra un tiempo aleatorio en segundos.
Con lo que aprendiste, prueba 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?