Se hai familiarità con Evento diretto vincolante, il concetto di eventi e funzioni con cui solitamente lavori sui dispositivi Modalità creativa si trasla anche a Verse. Puoi usare Verse per codificare le tue funzioni e i tuoi comportamenti che vengono eseguiti quando si verificano gli eventi!
Le sezioni seguenti descrivono i diversi modi in cui puoi lavorare con gli eventi del dispositivo Modalità creativa in Verse e codificare la tua logica.
Funzioni vincolanti per gli eventi del dispositivo Modalità creativa
Puoi sottoscrivere gli eventi che i dispositivi Modalità creativa espongono nelle relative API. Ad esempio, la classe del dispositivo Pulsante button_device espone InteractedWithEvent, che si verifica ogni volta che il giocatore interagisce con il dispositivo Pulsante. Puoi chiamare Subscribe() sull'evento e passare l'identificatore della funzione che vuoi chiamare ogni volta che l'evento viene segnalato.
La Sottoscrizione ti consente di specificare una funzione da chiamare quando viene segnalato un evento, denominata associazione a un evento. La funzione associata viene definita gestore. Nell'esempio seguente, il gestore è OnButtonInteractedWith.
A seconda della definizione di evento, la firma della funzione deve corrispondere a ciò che l'evento prevede di chiamare. Ad esempio, la sottoscrizione all'evento InteractedWithEvent per button_device si aspetta di ricevere una funzione con un parametro di tipo agent, quindi la funzione OnButtonInteractedWith deve essere simile alla seguente:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
@editable
MyButtonDevice:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Associa la funzione OnButtonInteractedWith a InteractedWithEvent del dispositivo Pulsante
MyButtonDevice.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
OnButtonInteractedWith(InAgent:agent):void=
Print("Il giocatore ha interagito con il pulsante!")
Quando chiami Subscribe() su un evento del dispositivo, la funzione restituisce un risultato cancelable. La chiamata di Cancel() su una variabile cancelable annulla la funzione che gestisce l'evento, in modo che la funzione non sia più chiamata quando l'evento viene segnalato.
Se vuoi memorizzare un singolo risultato cancelable, puoi usare un contenitore come option. Non puoi creare direttamente una variabile cancellabile, ma puoi impostare una variabile option per contenere il risultato di una sottoscrizione.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
spawner_button := class(creative_device):
@editable
Button:button_device = button_device{}
# Contenitore per la memorizzazione della sottoscrizione agli eventi
var ButtonSubscription:?cancelable = false
OnBegin<override>()<suspends>:void=
ButtonSubscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
# Imposta il risultato annullabile come valore della variabile option.
set ButtonSubscription = option{Subscription}
Print("Sottoscrizione a InteractedWithEvent del Pulsante e assegnazione della sottoscrizione in ButtonSubscription!")
OnButtonInteractedWith(InPlayer:agent):void=
Print("Il giocatore ha interagito con il pulsante!")
# Accedi alla variabile cancellabile per la sottoscrizione InteractedWithEvent
if(CancelableResult := ButtonSubscription?):
CancelableResult.Cancel()
Print("Annullamento di questo InteractedWithEvent")
Se il tuo dispositivo Verse ha più sottoscrizioni di eventi, è una buona idea utilizzare un contenitore come un array per memorizzare tutti i risultati cancelable di ogni sottoscrizione di evento, in modo da poterla annullare in seguito. Poiché Subscribe() restituisce un risultato cancelable, puoi impostare i valori dell'array cancelable quando ti registri la prima volta agli eventi.
Esempio di generazione di un oggetto quando il giocatore preme un pulsante

In questa sezione, imparerai a creare un generatore oggetti che genera il proprio oggetto quando il giocatore interagisce con un pulsante.
- Inizia posizionando un dispositivo Generatore di oggetti e un dispositivo Pulsante nel tuo livello. Per scoprire come posizionare i dispositivi nel tuo livello, vedi Posizionamento di oggetti in Comandi UEFN per utenti creativi.
- Imposta quale oggetto verrà generato per il dispositivo Generatore di oggetti. Per maggiori dettagli, vedi Generatore di oggetti.
- Crea un dispositivo Verse con proprietà modificabili per il dispositivo Pulsante e il dispositivo Generatore di oggetti. Vedi Aggiunta di un riferimento Verse a un dispositivo Modalità creativa nel tuo livello.
- Aggiungi una variabile opzione
cancelableal dispositivo per tenere traccia di tutte le sottoscrizioni del dispositivo Pulsante. - Sottoscrivi l'evento
InteractedWithEvent, proietta il risultato in unaoptione assegnalo alla variabileButtonSubscription. - Nel gestore eventi per
InteractedWithEvent, chiamaItemSpawner.SpawnItem(). Quindi annulla la sottoscrizione accedendo al valore all'interno dell'opzioneButtonSubscriptione chiamandoCancel(). - Di seguito è riportato il codice Verse completo per la generazione di un oggetto quando il giocatore interagisce con il dispositivo Pulsante. Interagendo una seconda volta con il pulsante non si genera un altro oggetto.
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } spawner_button := class(creative_device): @editable Button:button_device = button_device{} @editable ItemSpawner:item_spawner_device = item_spawner_device{} # Contenitore per la memorizzazione della sottoscrizione agli eventi var ButtonSubscription:?cancelable = false OnBegin<override>()<suspends>:void= Subscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith) # Aggiungi il risultato annullabile a un punto dell'array Subscriptions. set ButtonSubscription = option{Subscription} Print("Sottoscrizione a InteractedWithEvent del Pulsante e assegnazione della sottoscrizione in ButtonSubscription!") OnButtonInteractedWith(InPlayer:agent):void= ItemSpawner.SpawnItem() # Accedi alla variabile cancellabile per la sottoscrizione InteractedWithEvent if(CancelableResult := ButtonSubscription?): CancelableResult.Cancel() Print("Annullamento di questo InteractedWithEvent")Avvia il gioco e interagisci con il pulsante per generare un oggetto. Poiché hai annullato
InteractedWithEvent, il pulsante dovrebbe generare un oggetto una volta sola.
Dai un'occhiata al Tutorial Puzzle delle luci con tag per un esempio di gioco che utilizza la sottoscrizione e l'annullamento del dispositivo!
In attesa di un evento del dispositivo Modalità creativa
Puoi iscriverti agli eventi, ma c'è un altro modo per aspettare che un evento si verifichi. Puoi chiamare Await() su un evento del dispositivo Modalità creativa, che è una chiamata di funzione asincrona e può richiedere del tempo per essere completata. Ciò significa che devi utilizzarla in un contesto asincrono, come ad esempio un'espressione di concorrenza o una funzione con l'identificatore suspends. Per saperne di più sulla concorrenza, dai un'occhiata a Flusso temporale e concorrenza.
Nell'esempio seguente, il dispositivo Verse attende che il giocatore interagisca con il dispositivo Attivatore prima che accada qualsiasi altra cosa. Se interagisce con uno dei dispositivi Pulsante prima del dispositivo Attivatore, non succederà nulla. Dopo aver interagito con il dispositivo Attivatore, il giocatore deve fare una scelta e scegliere tra i due pulsanti. Può interagire solo con uno dei pulsanti e può farlo solo una volta perché si verifichi qualcosa, perché il codice utilizza un'espressione race per competere tra i due eventi del pulsante. Per maggiori dettagli sul funzionamento di questa espressione di concorrenza, consulta Race.
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=
# Attende che il giocatore passi sull'attivatore e impedisca l'esecuzione di qualsiasi altro codice fino a quando ciò non avviene.
# Ciò significa che se il giocatore interagisce con i due pulsanti, non accadrà nulla finché non si verificherà questo evento.
MakeChoice.TriggeredEvent.Await()
Print("Devi fare una scelta: premi il pulsante rosso e resterai nel paese delle meraviglie oppure il pulsante blu e ti sveglierai nel tuo letto.")
# Entrambe le espressioni di blocco vengono eseguite contemporaneamente in questa espressione race.
# Quando il giocatore interagisce con uno dei pulsanti, l'attesa dell'interazione con l'altro pulsante viene annullata.
# Ciò significa che il giocatore può interagire solo con uno dei dispositivi Pulsante.
race:
block:
RedButton.InteractedWithEvent.Await()
Print("Hai scelto di restare nel paese delle meraviglie.")
block:
BlueButton.InteractedWithEvent.Await()
Print("Hai scelto di svegliarti nel tuo letto.")
# Se il giocatore interagisce con uno dei dispositivi a questo punto, non succederà nulla, perché abbiamo aspettato che gli eventi si verificassero una sola volta.
Questi eventi aspettano una volta sola. Se vuoi ripetere l'attesa di questi eventi, puoi usare un'espressione loop per ripetere questa logica tutte le volte che vuoi.
Passaggio successivo: modulo del dispositivo
Ora che hai imparato come utilizzare i generatori oggetti e i pulsanti, puoi procedere a scoprire gli altri dispositivi di Fortnite Creativo che puoi utilizzare e sottoscrivere dal tuo dispositivo. Queste informazioni sono disponibili nella Guida API Verse. Passa a Modulo Dispositivi per vedere tutti i dispositivi di Fortnite Creativo che puoi utilizzare in Verse.