Wenn du mit Direkte Event-Bindung vertraut bist, lassen sich das Konzept von Events und die Funktionen, mit denen du bei Kreativmodus-Geräte zu arbeiten gewohnt bist, auch auf Verse übertragen. Du kannst Verse verwenden, um deine eigenen Funktionen und Verhaltensweisen zu programmieren, die beim Auftreten von Events ausgeführt werden
In den folgenden Abschnitten werden die verschiedenen Möglichkeiten beschrieben, wie du mit Kreativmodus-Geräte-Events in Verse arbeiten und deine eigene Logik programmieren kannst.
Bindungsfunktion zu Kreativmodus-Geräte-Events
Du kannst Events abonnieren, die Kreativmodus-Geräte in ihrer API zur Verfügung stellen. Zum Beispiel gibt die Klasse button_device
des Schaltflächen-Geräts InteractedWithEvent
frei. Dies geschieht immer dann, wenn der Spieler mit dem Schaltflächen-Gerät interagiert. Du kannst Subscribe()
für das Event aufrufen und die Kennung der Funktion übergeben, die du aufrufen möchtest, wann immer das Event signalisiert wird.
Mit Abonnieren kannst du eine Funktion angeben, die aufgerufen wird, wenn ein Event signalisiert wird. Dies wird als Bindung an ein Event bezeichnet. Die gebundene Funktion wird als Handler bezeichnet. Im nachfolgenden Beispiel ist der Handler OnButtonInteractedWith
.
Abhängig von der Event-Definition muss die Funktionssignatur mit dem übereinstimmen, was das Event als Aufruf erwartet. Wenn du beispielsweise das Event InteractedWithEvent
für button_device
abonnierst, wird erwartet, dass du eine Funktion mit einem Parameter vom Typ agent
erhälst. Daher sollte die Funktion OnButtonInteractedWith
wie folgt aussehen:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
@editable
MyButtonDevice:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Bindet die OnButtonInteractedWith-Funktion an das InteractedWithEvent des Schaltflächengeräts
MyButtonDevice.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
OnButtonInteractedWith(InAgent:agent):void=
Print("Spieler hat mit der Schaltfläche interagiert!")
Wenn du bei einem Geräte-Event Subscribe()
aufrufst, gibt der Funktionsaufruf ein cancellable
-Ergebnis zurück. Durch den Aufruf von Cancel()
für eine cancelable
-Variable wird das Abonnement der Funktion, die das Event verarbeitet, gekündigt, sodass die Funktion nicht mehr aufgerufen wird, wenn das Event signalisiert wird.
Wenn du ein einzelnes cancelable
-Ergebnis speichern möchtest, kannst du einen Container wie eine option
nutzen. Du kannst nicht direkt eine cancelable
Variable erstellen, aber du kannst eine option
-Variable einrichten, die das Ergebnis eines Abonnements aufnimmt.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
spawner_button := class(creative_device):
@editable
Button:button_device = button_device{}
# Container zum Speichern des Event-Abonnements
var ButtonSubscription:?cancelable = false
OnBegin<override>()<suspends>:void=
ButtonSubscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
# Lege das Ergebnis von cancelable als Wert in der Variable option fest.
set ButtonSubscription = option{Subscription}
Print("Das InteractedWithEvent des Knopfs wurde abonniert und das Abonnement wurde ButtonSubscription zugewiesen.")
OnButtonInteractedWith(InPlayer:agent):void=
Print("Spieler hat mit der Schaltfläche interagiert!")
# Zugang zur stornierbaren Variable für das InteractedWithEvent-Abonnement
if(CancelableResult := ButtonSubscription?):
CancelableResult.Cancel()
Print("Dieses InteractedWithEvent wurde abgebrochen")
Wenn dein Verse-Gerät über mehrere Event-Abonnements verfügt, empfiehlt es sich, einen Container wie ein Array zu verwenden, um alle stornierbaren
Ergebnisse jedes Event-Abonnements zu speichern, damit du sie später kündigen kannst. Da Subscribe()
ein cancelable
Ergebnis zurückgibt, kannst du deine cancelable
Array-Werte festlegen, wenn du Events zum ersten Mal abonnierst.
Beispiel für einen spawnenden Gegenstand, wenn der Spieler eine Taste drückt

In diesem Abschnitt lernst du, wie du einen Gegenstands-Spawnpunkt erstellst, der seinen Gegenstand spawnt, wenn der Spieler mit einer Schaltfläche interagiert.
- Beginne damit, ein Gegenstands-Spawnpunkt-Gerät und ein Schaltflächen-Gerät in deinem Level zu platzieren. Informationen zum Platzieren von Geräten in deinem Level findest du unter „Objektplatzierung“ im Abschnitt UEFN-Steuerung für Nutzer des Kreativmodus.
- Lege fest, welcher Gegenstand für das Gegenstands-Spawnpunkt-Gerät spawnen soll. Siehe Gegenstands-Spawnpunkt für weitere Details.
- Erstelle ein Verse-Gerät mit bearbeitbaren Eigenschaften für das Schaltflächengerät und das Gegenstands-Spawnpunkt-Gerät. Siehe Hinzufügen eines Verse-Referenz zu einem Kreativmodus-Gerät in deinem Level.
- Füge dem Gerät eine
cancelable
Optionsvariable hinzu, um das Abonnement des Schaltflächen-Geräts zu verfolgen. - Abonniere
InteractedWithEvent
, verwandle das Ergebnis in eineoption
und weise sie der VariableButtonSubscription
zu. - Rufe im Ereignishandler für
InteractedWithEvent
ItemSpawner.SpawnItem()
auf. Kündige dann das Abonnement, indem du auf den Wert in der OptionButtonSubscription
zugreifst undCancel()
aufrufst. - Im Folgenden findest du den vollständigen Verse-Code zum Erzeugen eines Gegenstands, wenn der Spieler mit dem Schaltflächengerät interagiert. Bei einer zweiten Interaktion mit dem Schaltflächengerät wird kein weiterer Gegenstand gespawnt.
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{} # Container zum Speichern des Event-Abonnements var ButtonSubscription:?cancelable = false OnBegin<override>()<suspends>:void= Subscription := Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith) # Fügt das stornierbare Ergebnis an einer Stelle im Abonnement-Array hinzu. set ButtonSubscription = option{Subscription} Print("Das InteractedWithEvent des Knopfs wurde abonniert und das Abonnement wurde ButtonSubscription zugewiesen.") OnButtonInteractedWith(InPlayer:agent):void= ItemSpawner.SpawnItem() # Zugang zur stornierbaren Variable für das InteractedWithEvent-Abonnement if(CancelableResult := ButtonSubscription?): CancelableResult.Cancel() Print("Dieses InteractedWithEvent wurde abgebrochen")
Starte dein Spiel und interagiere mit der Schaltfläche, um einen Gegenstand zu spawnen. Da du das
InteractedWithEvent
abgebrochen hast, sollte die Schaltfläche nur einmal einen Gegenstand spawnen.
Schaue dir das Tutorial zum Tagged-Lights-Rätsel an, um ein Spielbeispiel zu sehen, das dieses Geräteabonnement und die Kündigung verwendet!
Warten auf ein Kreativmodus-Geräte-Event
Du kannst Events abonnieren, aber es gibt noch eine andere Möglichkeit, auf das Auftreten eines Events zu warten. Du kannst Await()
für ein Kreativmodus-Geräte-Event aufrufen. Dabei handelt es sich um einen asynchronen-Funktionsaufruf, dessen Abschluss einige Zeit in Anspruch nehmen kann. Dies bedeutet, dass du es in einem asynchronen Kontext verwenden musst, z. B. in einem Parallelitätsausdruck oder einer Funktion mit dem Bezeichner suspends
. Weitere Informationen zur Parallelität findest du unter Zeitablauf und Parallelität.
Im folgenden Beispiel wartet das Verse-Gerät darauf, dass der Spieler mit dem Trigger-Gerät interagiert, bevor irgendetwas anderes passieren kann. Wenn sie mit einem der Schaltflächengeräte vor dem Auslöser-Gerät interagieren, passiert nichts. Nachdem der Spieler mit dem Auslöser-Gerät interagiert hat, muss er eine Entscheidung treffen und zwischen den beiden Schaltflächen wählen. Er kann nur mit einer der Schaltflächen interagieren und nur einmal interagieren, damit etwas passiert, weil der Code einen Race
-Ausdruck verwendet, um zwischen den beiden Schaltflächen-Events zu wechseln. Weitere Einzelheiten über die Funktionsweise dieses Parallelitätsausdrucks findest du in 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=
# Dies wartet darauf, dass der Spieler auf den Trigger tritt und verhindert, dass anderer Code hier ausgeführt wird, bis dies geschieht.
# Das bedeutet, dass, wenn der Spieler mit den beiden Schaltflächengeräten interagiert, nichts passiert, bis dieses Event auftritt.
MakeChoice.TriggeredEvent.Await()
Print("Entscheide dich: roter Knopf und du bleibst im Wunderland, oder blauer Knopf und du wachst wieder in deinem Bett auf.")
# In diesem Race-Ausdruck werden beide Blockausdrücke gleichzeitig ausgeführt.
# Wenn der Spieler mit einer der Schaltflächen interagiert, wird das Warten auf die Interaktion mit der anderen Schaltfläche abgebrochen.
# Das bedeutet, dass der Spieler nur mit einem der Schaltflächengeräte interagieren kann.
race:
block:
RedButton.InteractedWithEvent.Await()
Print("Du hast dich entschieden, im Wunderland zu bleiben.")
block:
BlueButton.InteractedWithEvent.Await()
Print("Du hast dich entschieden, in deinem Bett aufzuwachen.")
# Wenn der Spieler zu diesem Zeitpunkt mit einem der Geräte interagiert, passiert nichts, da wir nur darauf gewartet haben, dass die Events einmal eintreten.
Diese Events warten nur einmal. Wenn du das Warten auf diese Events wiederholen möchtest, kannst du einen loop
-Ausdruck verwenden, um diese Logik so oft zu wiederholen, wie du möchtest.
Nächster Schritt: Geräte-Modul
Du weißt nun, wie man mit Gegenstands-Spawnpunkten und Schaltflächen arbeitet. Doch es gibt noch mehr Kreativmodus-Geräte, die du verwenden und über dein eigenes Gerät abonnieren kannst. Diese Informationen findest du in der VerseAPI-Referenz. Gehe zu Gerätemodule, dort findest du alle Kreativmodus-Geräte, mit denen du in Verse arbeiten kannst.