Il Modello di parkour di Verse ti guida nella creazione di una modalità di gioco in cui i giocatori devono superare in modo strategico ostacoli e piattaforme per raccogliere batterie.
In questa modalità di gioco, i giocatori devono raccogliere quattro batterie per completare il livello. Il tempo di gioco viene prolungato se trovano la batteria segreta. Quando il tempo termina, i giocatori dovranno ricominciare dall'inizio.
Questo modello introduce alcune caratteristiche di base del linguaggio, come:
-
Loop for
-
Sottoscrizioni
-
Array
-
API dispositivo
Concetti più complessi, come la concorrenza, non sono utilizzati in questo modello.
Panoramica
Quella che segue è una panoramica dei passaggi necessari per ricreare quest'isola nella sequenza ideale:
-
Crea un nuovo progetto e modifica le Impostazioni isola per configurare il gioco.
-
Costruisci l'arena.
-
Configura i dispositivi.
-
Aggiungi lo script Verse.
Creazione di un nuovo progetto e configurazione del gioco
-
Apri UEFN e crea un nuovo progetto vuoto.
-
Seleziona il dispositivo IslandSettings nell'Outliner e individua la sezione Opzioni utente - Regole del gioco.
-
Modifica le opzioni utente come mostrato di seguito.
Opzione Valore Spiegazione Condizione di vittoria del gioco Vittoria con maggior punteggio Il gioco viene vinto dal giocatore con il punteggio più alto. Distruzione piccone Nessuna I picconi non causano danni all'ambiente. Inizia con un piccone False I giocatori iniziano il gioco senza un piccone. Raccolta automatica oggetti Sì I giocatori possono raccogliere automaticamente gli oggetti con cui vengono a contatto. Consenti arrampicata/scatto/scivolata/spallate True I giocatori possono fare parkour nell'ambiente circostante. Condizione di vittoria del round Punteggio Il round viene vinto dal giocatore con il punteggio più alto. Prima colonna della classifica Punteggio La classifica mostra il punteggio nella prima colonna.
Costruzione dell'arena
Questa mappa utilizza la Galleria oggetti Città cibernetica, disponibile alla sezione Fortnite > Gallerie > Oggetti scenografici.
Ricrea questa mappa con piattaforme e ostacoli che i giocatori dovranno superare.
Configurazione dei dispositivi
Questo tutorial utilizza i seguenti dispositivi:
-
1 dispositivo Volume di danni
-
1 timer
Dispositivo Pedana di generazione giocatore

Utilizza un dispositivo Pedana di generazione giocatore per generare i giocatori sulla mappa. All'inizio della mappa, posiziona una pedana di generazione per ogni giocatore che puoi trovare in Fortnite > Dispositivi > Pedana di generazione giocatore.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Visibile in gioco | False | Questo dispositivo non sarà visibile nel gioco. |
Dispositivo Assegnatore oggetti

In UEFN, trascinando un oggetto dal Cassetto dei contenuti lo si posiziona automaticamente in un dispositivo Generatore di oggetti. Trascina un oggetto Batteria nella Mappa, che puoi trovare in Fortnite > Oggetti > Batteria.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Tempo prima della generazione | 0.1 | Determina l'intervallo di tempo prima della generazione dell'oggetto. |
Rigenera oggetto in base a un timer | False | La batteria non viene rigenerata una volta raccolta. |
Base visibile in gioco | False | Il dispositivo non è visibile durante il gioco. |
Munizioni bonus per le armi | False | Le armi non dispongono di munizioni bonus. |
Passaggio sul raccoglibile | True | I giocatori raccolgono automaticamente questo oggetto. |
Scala oggetto | 2.0 | Determina le dimensioni della batteria. |
Copia e incolla il dispositivo altre quattro volte e posiziona le copie ottenute in punti diversi della mappa.
Dispositivo Fine gioco

Posiziona un dispositivo Fine gioco in modo che il gioco venga terminata quando viene attivato.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Segnale di vittoria personalizzato | Inserisci testo | Inserisci il testo che desideri visualizzare per il giocatore vincente. |
Dispositivo Volume di danni

Il dispositivo Volume di danni definisce una zona limite entro la quale i giocatori possono subire danni. Posiziona questo dispositivo sotto la tua mappa e regola larghezza, profondità e altezza della zona per coprire la parte inferiore dell'arena ed eliminare immediatamente i giocatori che cadono.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Danni | 500 | Il dispositivo infligge un danno sufficiente per eliminare istantaneamente i giocatori che cadono. |
Dispositivo Timer

Posiziona un dispositivo Timer vicino al dispositivo Fine gioco. Il conto alla rovescia del timer è attivo fino a quando un giocatore non viene eliminato e deve riavviarsi. |
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Durata | 30 | La durata del timer è di 30 secondi. |
Avvia a inizio gioco | True | Il timer si avvia non appena inizia il gioco. |
Applica a | Giocatore | Quando il timer si avvia, si applica a un giocatore specifico. |
Completato alla fine del timer | False | La fine del conto alla rovescia del timer non indica un successo. |
Visibile in gioco | Nascosto | Il dispositivo è nascosto durante il gioco. |
Testo avvio timer | Inserisci testo | Inserisci il testo che desideri mostri il timer. |
Messaggio HUD

Utilizza un dispositivo Messaggio HUD per mostrare ai giocatori messaggi coinvolgenti.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
Tempo di visualizzazione | 2.0 | Il messaggio viene visualizzato per due secondi prima di scomparire. |
Mostra quando inizia il round | False | Questo messaggio non viene visualizzato all'inizio del round, ma quando il giocatore raccoglie una batteria. |
Aggiunta degli script Verse
Aggiungi gli script Verse seguenti, iniziando a fare riferimento ai dispositivi con la funzione @editable.
Puoi copiare il codice nell'ordine in cui è scritto. I commenti vengono inseriti all'interno dello script con finalità di chiarezza.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# Dispositivo Creativo sviluppato con Verse che può essere inserito in un livello
# Questo esempio di script è una versione di Parkour in cui l'obiettivo è raccogliere 4 batterie prima dello scadere del tempo
N.
# Per iniziare:
# https://dev.epicgames.com/documentation/en-us/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Riferimento alla pedana di generazione giocatore
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
# Dispositivo Fine gioco per una vittoria
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Timer per questa modalità di gioco
@editable
TimerDevice : timer_device = timer_device{}
# Commenti al messaggio HUD destinato al giocatore quando raccoglie una batteria
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Array dei Generatori oggetti di cui disponiamo.
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Durata personalizzabile da aggiungere quando il giocatore raccoglie la batteria segreta
@editable
SecretBatteryTimeReward : float = 10.0
# Dichiarazione di un numero intero che rappresenta il numero di batterie che il giocatore ha raccolto fino a quel momento
var BatteriesCollected : int = 0
Lo script appena illustrato mostra come utilizzare la funzione @editable per rendere accessibili a UEFN dispositivi, array e float di Fortnite Creativo. Affinché il tuo script possa chiamarli in seguito, devi prima definire i dispositivi in Verse.
# Messaggi da visualizzare quando viene raccolta una batteria
BatteryCollectedMessage<localizes>(Amount:int) : message = "Hai raccolto {Amount} batterie"
BatteriesCollectedMessage<localizes>(Amount:int) : message = "Hai raccolto {Amount} batterie"
# Messaggi per la raccolta della batteria segreta e il messaggio di fine
AllBatteriesCollectedMessage<localizes> : message = "Hai raccolto tutte le batterie!"
SecretBatteryCollectedMessage<localizes> : message = "Hai raccolto la batteria segreta, tempo supplementare aggiunto!"
Lo script illustrato mostra come definire una funzione che restituisce un messaggio parametrizzato in base alla quantità di batterie raccolte. Inoltre, definisce i messaggi da mostrare quando tutte le batterie e la batteria segreta sono state raccolte.
# Viene eseguito quando device_script viene avviato in un gioco in corso
OnBegin<override>()<suspends>:void=
# ll registro può essere visualizzato come segue per determinare cosa sta facendo lo script
Logger.Print("Script della gara di parkour avviato!")
# Esegue la sottoscrizione a AgentSpawnedEvent.
# Quando il giocatore viene visualizzato, viene chiamata la funzione "HandleAgentSpawned".
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# Lo stesso vale per il timer. Esegue la sottoscrizione quando scade il tempo.
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# Sfoglia l'array di batteryItemSpawners e, per ogni Generatore oggetti, sottoscrive l'evento ItemPickupEvent.
# Procedi allo stesso modo per ogni generatore oggetti e non salvare l'handle come prima per AgentSpawnedSubscription e TimerExpiredSubscription.
# Anche se non è necessario salvare l'handle, senza di esso è impossibile annullare la sottoscrizione in modo che venga attivata ogni volta che viene raccolto un oggetto.
for (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Un altro modo di eseguire il loop for descritto che usa un numero intero per analizzare l'array
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandlebatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
La funzione OnBegin definisce cosa succede all'avvio del gioco quando viene eseguito il loop sull'evento batterie raccolte.
# Una funzione che viene chiamata quando l'agente viene visualizzato sulla pedana di generazione giocatore
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agente generato!")
# Ripristina il dispositivo Timer per garantire la rigenerazione dei giocatori con a disposizione tutto il tempo necessario
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
Il codice illustrato azzera il tempo del timer e lo riavvia quando viene generato il giocatore.
# Funzione che viene chiamata quando un oggetto batteria viene prelevato dai generatori oggetti
HandleBatteryPickedUp(Agent:agent):void=
# Aumenta il numero delle batterie raccolte
set BatteriesCollected = BatteriesCollected + 1
# Ecco come puoi visualizzare il numero di batterie del registro. Utile per il debug.
Logger.Print("Numero di batterie raccolte: {BatteriesCollected}")
# Controlla se sono state raccolte abbastanza batterie per terminare il gioco
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# Controlla se sono state raccolte 4 (o più) batterie. Se il risultato è positivo, chiama la funzione EndGame
spawn { EndGame(Agent) }
else:
# Questo codice viene eseguito se il numero di batterie è inferiore a 4. Mostra un messaggio HUD per spronare il giocatore
# Il messaggio HUD è "batteria" se è stata raccolta una sola batteria. Diventa invece "batterie" se è stato raccolto un numero di batterie superiore a 1
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteriesCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Successivamente, recupera il seguente generatore oggetti dall'array configurato
# Per farlo, "indicizzalo" nell'array. Si trova all'interno dell'istruzione "if" per garantire che NextBatterySpawner sia usato come rifornimento correttamente.
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# Quando viene ottenuto il successivo generatore oggetti, chiama SpawnItem per attivare la successiva batteria da ottenere
NextBatterySpawner.SpawnItem()
Il codice illustrato gestisce la raccolta di una batteria. Se tutte le batterie sono state raccolte, viene richiamato il metodo EndGame. In caso contrario, ai giocatori vengono mostrati messaggi HUD e viene generata la batteria successiva.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Batteria segreta raccolta")
# Ottieni il tempo rimanente in modo da poterne aggiungere dell'altro
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Aggiungi tempo extra al timer senza superare la sua durata iniziale
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Il codice illustrato allunga la durata del tempo del timer quando viene raccolta la batteria segreta. È impostato per non superare il tempo di avvio del Timer di 30 secondi. Questo codice visualizza anche un messaggio sullo schermo.
# Funzione che viene chiamata quando termina la durata del timer
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Timer terminato")
if (Agent := MaybeAgent?):
Agente
# Elimina il giocatore
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
then:
FortCharacter.Damage(500.0)
Il codice illustrato elimina i giocatori quando scade il tempo. I giocatori vengono rigenerati e il timer viene ripristinato nel metodo HandleAgentSpawned.
# Funzione asincrona che gestisce la fine del gioco
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Attendi tre secondi prima di terminare la gioco
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# Viene eseguito quando il device_script viene fermato o il gioco termina.
OnEnd<override>():void=
Logger.Print("Dispositivo Verse interrotto!")
Il codice illustrato determina la fine del gioco. L'utilizzo di Sleep(3.0) è un esempio di applicazione di un metodo asincrono.
Configurazione del dispositivo Verse

Compila lo script Verse, quindi individua il tuo dispositivo in Esplora contenuti. Trascina il dispositivo Verse in un'area non visibile della mappa per configurarne le impostazioni.

Nel pannello Dettagli del dispositivo, configura le impostazioni in modo che corrispondano a ciascun dispositivo di riferimento, come nella foto qui sopra.
Per configurare il dispositivo, imposta le Opzioni utente seguenti:
Opzione | Valore | Spiegazione |
---|---|---|
PlayerSpawnDevice | Pedana di generazione giocatore | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
EndGameVictoryDevice | Dispositivo di Fine gioco per una vittoria | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
TimerDevice | Timer | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
HUDMessageBattery | Batteria del dispositivo Messaggio HUD | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
PlayerSpawnDevice | Pedana di generazione giocatore | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
BatteryItemSpawners - 0 | Generatore batteria 1 | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
BatteryItemSpawners - 1 | Generatore batteria 2 | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
BatteryItemSpawners - 2 | Generatore batteria 3 | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
BatteryItemSpawners - 3 | Generatore batteria 4 | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
SecretBatteryItemSpawner | Generatore batteria segreta | Seleziona questa opzione dalla casella del menu a tendina dei dispositivi di riferimento. |
SecretBatteryTimeReward | 10.0 | La ricompensa in tempo per la raccolta della batteria segreta. |
Seleziona Avvia sessione per testare il livello completato.