La plantilla de Parkour de Verse te mostrará cómo crear un modo de juego donde los jugadores puedan realizar maniobras estratégicas a través de obstáculos y plataformas para recolectar pilas.
En este modo de juego, los jugadores recolectarán cuatro pilas para completar el nivel. El tiempo se extenderá si encuentran la pila secreta. Cuando el tiempo se termina, el jugador regresa al principio.
En esta plantilla, se muestran algunas funciones de lenguaje básicas como las siguientes:
-
Bucles "for"
-
Suscripciones
-
Matrices
-
API de dispositivo
Los conceptos complejos, como la concurrencia, no se usarán en esta plantilla.
Resumen
A continuación, encontrarás un resumen con los pasos que tendrás que seguir para recrear esta isla en la secuencia ideal:
-
Crea un nuevo proyecto y modifica los ajustes de isla para configurar el juego.
-
Crea la arena.
-
Configura los dispositivos.
-
Añade la secuencia de comandos de Verse.
Cómo crear un nuevo proyecto y configurar el juego
-
Abre UEFN y crea un nuevo proyecto vacío.
-
Selecciona el dispositivo de ajustes de isla en el esquematizador y busca Opciones de usuario - Reglas del juego.
-
Modifica las opciones de usuario como se muestra a continuación.
Opción Valor Explicación Condición de victoria de la partida El que tenga más puntaje gana El jugador con el puntaje más alto es el que gana la partida. Destrucción con pico Ninguna El pico no dañará el entorno. Comenzar con pico Falso Los jugadores no comenzarán la partida con un pico. Recoger objetos automáticamente Sí Los jugadores pueden recoger objetos automáticamente durante la partida. Permitir trepar/esprintar/deslizar/golpe de hombro Verdadero Los jugadores podrán hacer parkour en su entorno. Condición de victoria de la ronda Puntaje Ganarán la ronda los jugadores que tengan el puntaje más alto. Primera columna de marcador Puntaje El marcador mostrará el puntaje en la primera columna.
Cómo crear la arena
En este mapa, se utiliza la Galería de objetos de ciudad cibernética, que se encuentra en Fortnite > Galerías > Utilerías.
Recrea este mapa con plataformas y obstáculos para que los jugadores hagan parkour.
Cómo configurar los dispositivos
En este tutorial, se usan los siguientes dispositivos:
-
1 x Volumen de daño
-
1 x Cronómetro
-
1 x Mensajes del HUD
Dispositivo de aparición de jugador

Usa un dispositivo de plataforma de aparición de jugador para hacer aparecer jugadores en el mapa. Al inicio del mapa, coloca una plataforma de aparición para cada jugador, que puedes encontrar en Fortnite > Dispositivos > Plataforma de aparición de jugador.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Visible en la partida | Falso | Este dispositivo no será visible durante el juego. |
Dispositivo de otorgador de objetos

En UEFN, si arrastras un consumible desde el cajón de contenido, automáticamente se coloca en un dispositivo de otorgador de objetos. Arrastra un objeto de Batería hacia el mapa, que puedes encontrar en Fortnite > Objetos > Batería.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Tiempo antes la primera aparición | 0.1 | Determina la cantidad de tiempo que debe transcurrir para que se genere el objeto. |
Reaparición de objeto con cronómetro | Falso | La pila no volverá a aparecer si ya se escogió una vez. |
Base visible durante la partida | Falso | El dispositivo no estará visible durante la partida. |
Munición de sobra de armas | Falso | Las armas no otorgarán municiones adicionales. |
Recolección al pasar por encima | Verdadero | Los jugadores recogerán este objeto de forma automática. |
Escala | 2.0 | Determina el tamaño de la pila. |
Copia y pega este dispositivo cuatro veces más, y colócalo por todo el mapa.
Dispositivo de terminar la partida

Coloca un dispositivo de terminar la partida que finalice el juego cuando se active.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Declaración de victoria personalizada | Introducir texto | Introduce el texto que deseas que se muestre para el jugador ganador. |
Dispositivo de volumen de daño

El dispositivo de volumen de daño es un límite que puede dañar a los jugadores dentro de su zona. Coloca este dispositivo debajo del mapa y ajusta el ancho de la zona, la profundidad y la altura para cubrir la parte inferior de la arena y eliminar de forma instantánea a los jugadores caídos.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Daño | 500 | Este dispositivo utiliza la cantidad de daño suficiente para eliminar de forma instantánea a los jugadores que se caen. |
Dispositivo de cronómetro

Coloca un dispositivo de cronómetro cerca del dispositivo de terminar partida. Este dispositivo contará el tiempo hasta que el jugador sea eliminado y deba volver a empezar.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Duración | 30 | El cronómetro durará 30 segundos. |
Iniciar al inicio de la partida | Verdadero | El cronómetro se pone en marcha apenas empieza la partida. |
Se aplica a | Jugador | Cuando el cronómetro se inicia, se aplica a un jugador específico. |
Éxito al finalizar el cronómetro | Falso | Cuando el cronómetro llega a su fin, no se cuenta como una operación correcta. |
Visible durante la partida | Oculto | El dispositivo se ocultará durante la partida. |
Texto de cronómetro en curso | Introducir texto | Introduce el texto que deseas que se muestre para el cronómetro. |
Mensajes del HUD

Usa un dispositivo de mensajes del HUD para mostrar mensajes interesantes a los jugadores.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
Tiempo para mostrar | 2.0 | El mensaje se mostrará durante dos segundos y desaparecerá. |
Mostrar al inicio de la ronda | Falso | Este mensaje no se mostrará cuando se inicie la ronda, pero sí cuando se recoja una pila. |
Cómo agregar las secuencias de comandos de Verse
Añade las siguientes secuencias de comandos de Verse. Para empezar, haz referencia a los dispositivos con la función @editable.
Puedes copiar el código en el orden en que está escrito. Los comentarios se agregan dentro de la secuencia de comandos para brindar mayor claridad.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation}
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# Es un dispositivo del modo Creativo creado con Verse y que se puede colocar en un nivel
# Esta secuencia de comandos de ejemplos es una versión de Parkour en la que el objetivo es reunir cuatro pilas antes de que termine el tiempo
#
# Primeros pasos:
# https://dev.epicgames.com/documentation/es-MX/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Referencia del dispositivo a la aparición de jugador
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
# Dispositivo de terminar la partida para una victoria
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Cronómetro para este modo de juego
@editable
TimerDevice : timer_device = timer_device{}
# Comentarios del mensaje del HUD para el jugador cuando consigue una pila
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Una matriz de los otorgadores de objetos que tenemos.
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Cantidad de tiempo optimizable que se agregará cuando el jugador recoja la pila secreta
@editable
SecretBatteryTimeReward : float = 10.0
# Declaración para un entero que representa la cantidad de pilas que recolectamos hasta el momento.
var BatteriesCollected : int = 0
La secuencia de comandos de arriba muestra cómo usar la función @editable para exponer dispositivos del modo creativo, matrices y valores float en UEFN. Para que la secuencia de comandos los llame más adelante, los dispositivos deben definirse primero en Verse.
# Mensajes que se mostrarán cuando se recolecte una pila
BatteryCollectedMessage<localizes>(Amount:int) : message = "Recolectaste {Amount} pila"
BatteriesCollectedMessage<localizes>(Amount:int) : message = "Recolectaste {Amount} pilas"
# Mensajes por recolectar la pilaa secreta y el mensaje de finalización
AllBatteriesCollectedMessage<localizes> : message = "¡Recolectaste todas las pilas!"
SecretBatteryCollectedMessage<localizes> : message = "Recolectaste la pila secreta. ¡Se añadió tiempo adicional!"
La secuencia de comandos de arriba muestra cómo definir una función que devuelve un mensaje parametrizado en función de la cantidad de pilas recolectadas. También define los mensajes que se mostrarán cuando se recolecten todas las pilas y la secreta.
# Se ejecuta cuando este device_script se inicia en un juego en marcha
OnBegin<override>()<suspends>:void=
# Puedes generar algo como lo siguiente en el registro para determinar qué hace la secuencia de comandos
Logger.Print("Secuencia de comandos de carrera de Parkour iniciada.")
# Suscripción a AgentSpawnedEvent.
# Cuando el jugador aparece, se llama a la función "HandleAgentSpawned".
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# Igual que para el cronómetro. Nos suscribimos cuando caduque
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# Vamos a la matriz de BatteryItemSpawners y, para cada generador de objetos, nos suscribimos a ItemPickupEvent.
# Hacemos esto para cada generador de objetos y no guardamos el controlador como lo hicimos anteriormente para AgentSpawnedSubscription y TimerExpiredSubscription.
# No tienes que guardar el controlador, pero sin él, no podrás cancelar la suscripción, así que se activará cada vez que se recoja un objeto.
for (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Una manera alternativa de hacer el bucle "for" de arriba que usa un entero para repasar la matriz
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandlebatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
La función OnBegin define qué sucede cuando se inicia el juego durante el bucle "for" para el evento de pilas recogidas.
# Una función que se llama cuando se genera el agente desde la plataforma de aparición de jugador
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agente generado.")
# Restablece el dispositivo de cronómetro para garantizar que los jugadores generados obtengan la cantidad de tiempo completa.
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
Anteriormente, se mostró el código utilizado para el momento en que aparece el jugador que restablece el cronómetro y lo vuelve a iniciar.
# Función que se llama cuando se recoge un objeto de batería de los generadores de objetos.
HandleBatteryPickedUp(Agent:agent):void=
# Aumenta la cantidad de baterías recolectadas
set BatteriesCollected = BatteriesCollected + 1
# Así es como puedes mostrar la cantidad de pilas en el registro. Es útil para la depuración
Logger.Print("Cantidad de pilas recolectadas: {BatteriesCollected}.")
# Revisa si las pilas recolectadas son suficientes para terminar la partida.
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# Revisa si recolectamos 4 pilas (o más). Si es así, significa que ganamos. Llama a la función EndGame.
spawn { EndGame(Agent) }
else:
# Este código se ejecuta si las pilas son menos de 4. Muestra un mensaje del HUD para animar al jugador
# El mensaje del HUD es "pila" si se recolectó 1 sola pila. Se convierte en "pilas" si las pilas recolectadas son más de 1.
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Luego, obtenemos el siguiente otorgador de objetos en la matriz que configuramos
# Para hacerlo, "indexamos" en la matriz. Está dentro de la declaración "if" para garantizar que la referencia a NextBatterySpawner se realice correctamente.
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# Si obtenemos el siguiente otorgador de objetos, llamamos a SpawnItem, que activará la siguiente pila para obtener
NextBatterySpawner.SpawnItem()
Arriba se muestra el código que controla una pila que se recoge. Si se recogieron todas las pilas, se llama al método EndGame. De lo contrario, se muestran los mensajes del HUD para los jugadores y se genera la siguiente pila.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Recolectaste la pila secreta.")
# Obtén el tiempo restante para poder agregar tiempo adicional.
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Agrega tiempo adicional al dispositivo de cronómetro, pero no vuelvas al tiempo de inicio.
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Arriba se muestra el código que agrega tiempo al cronómetro cuando se recoge la pila secreta. Se establece para no volver al tiempo de inicio del cronómetro de 30 segundos. Este código también muestra un mensaje en pantalla.
# Función que se llama cuando caduca el cronómetro
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Se acabó el tiempo.")
if (Agent := MaybeAgent?):
Agente
# Elimina al jugador
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
then:
FortCharacter.Damage(500.0)
Arriba se muestra el código que elimina al jugador cuando se agota el tiempo. El jugador reaparece, y el cronómetro se restablece en el método HandleAgentSpawned.
# Función asíncrona que controla el fin de la partida
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Espera tres segundos antes de finalizar la partida
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# Se ejecuta cuando este device_script se detiene o el juego termina
OnEnd<override>():void=
Logger.Print("Dispositivo de Verse detenido.")
Arriba se muestra el código que termina la partida. El uso de Sleep(3.0) es un ejemplo de usar un método asíncrono.
Cómo configurar el dispositivo de Verse

Compila la secuencia de comandos de Verse; luego, busca el dispositivo en el cajón de contenido. Arrastra el dispositivo de Verse hasta un área invisible de tu mapa para personalizar la configuración.

En el panel de detalles del dispositivo, configura los ajustes para que cada dispositivo referenciado coincida con la foto de arriba.
Para configurar este dispositivo, establece las Opciones de usuario tal y como se indica a continuación:
Opción | Valor | Explicación |
---|---|---|
PlayerSpawnDevice | Plataforma de aparición de jugador | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
EndGameVictoryDevice | Dispositivo de terminar partida por victoria | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
TimerDevice | Cronómetro | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
HUDMessageBattery | Dispositivo de mensajes del HUD, pila | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
PlayerSpawnDevice | Plataforma de aparición de jugador | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
BatteryItemSpawners - 0 | Otorgador de pilas 1 | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
BatteryItemSpawners - 1 | Otorgador de pilas 2 | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
BatteryItemSpawners - 2 | Otorgador de pilas 3 | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
BatteryItemSpawners - 3 | Otorgador de pilas 4 | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
SecretBatteryItemSpawner | Otorgador de pilas: Secreta | Selecciona esta opción en el menú desplegable para hacer referencia a los dispositivos. |
SecretBatteryTimeReward | 10.0 | La recompensa de tiempo provisto para recolectar la pila secreta. |
Selecciona Comenzar sesión para probar que completaste tu nivel.