Mit Gameplay-Tags kannst du, während das Spiel läuft, nach Actors suchen, die mit einem bestimmten Tag markiert sind. Gameplay-Tags ermöglichen dir, mit mehreren Actors zu arbeiten, ohne dass du in Unreal Editor für Fortnite (UEFN) Eigenschaften einrichten und Referenzen zuweisen musst. Gameplay-Tags werden im Verse-Code erstellt und in UEFN zugewiesen.
Die Verwendung von Gameplay-Tags kann ein interessantes Gameplay ermöglichen, wie zum Beispiel:
Ändern des Level-Setup ohne Hinzufügen oder Ändern von Gerätereferenzen zu deinem mit Verse erstellten Gerät.
Suchen nach allen Actors mit einem bestimmten Tag und deren Bedienung anhand ihres Typs, z. B. um Lichter einzuschalten oder Barrieren umzuschalten.
Dynamisches Ändern der aktiven Actors, wenn der Spieler im Spiel vorankommt
Bedingtes Aktivieren von Actors für einen Hindernislauf basierend auf der vom Spieler gewählten Schwierigkeitsgrad-Option.
Was kann getaggt werden?
Aktuell können folgende Elemente mit Gameplay-Tags versehen werden:
Die folgenden Abschnitte zeigen, wie du Gameplay-Tags in deinem Projekt erstellst und damit arbeitest.
Erstellen eines Gameplay-Tags
Befolge diese Schritte, um mit Verse ein neues Gameplay-Tag zu erstellen:
Öffne deine Verse-Datei mit dem Verse-Explorer in Visual Studio Code.
Füge am Anfang deiner Verse-Datei den folgenden Code hinzu, um die Referenzierung der Klasse
tagzu aktivieren.Verseusing { /Verse.org/Simulation/Tags }Erstelle eine neue Klasse, die von der Klasse
tagerbt. Der Name deiner Klasse bestimmt den Namen des Tags. In diesem Beispiel heißt die Klassemytag, also lautet der Name des Gameplay-Tags mytag.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Deine Verse-Datei sollte wie folgt aussehen:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Speichere deine Verse-Datei und klicke in der UEFN-Werkzeugleiste auf Verse Scripts erstellen, um deinen Code zu kompilieren, damit du dein neues Gameplay-Tag verwenden kannst.
Gameplay-Tags sind hierarchische Bezeichnungen. Diese Tags können beliebig viele hierarchische Level haben, die durch das Zeichen _ im Klassennamen getrennt sind.
Wenn der Name des Gameplay-Tags im Editor angezeigt wird, werden die _-Zeichen in „.“ konvertiert.
Ein Gameplay-Tag mit drei Level hätte beispielsweise den Klassennamen family_genus_species und würde im Editor als „family.genus.species“ angezeigt, wobei „family“ der am weitesten gefasste Bezeichner in der Hierarchie ist und „species“ die spezifischste.
Beachte, dass die Existenz von "family.genus.species" nicht implizit bedeutet, dass es auch Gameplay-Tags "family.genus" und "family" gibt. Du musst diese Gameplay-Tags in Verse mit den Klassennamen family und family_genus erstellen, um die hierarchischen Level zu erzeugen.
Zuweisen eines Gameplay-Tags
Befolge diese Schritte, um ein Gameplay-Tag zuzuweisen. In diesem Beispiel wird ein Gerät verwendet, die Schritte sind für andere Actors jedoch die gleichen.
Wähle in UEFN im Outliner das Gerät aus, das du taggen möchtest, um das Details-Panel zu öffnen. In diesem Beispiel ist das Gerät ein Schaltflächengerät.
Klicke im Details-Panel auf Neue Komponente hinzufügen und wähle Verse Tag Markup aus der Dropdown-Liste.
Wähle die Komponente VerseTagMarkup aus, um ihre Einstellungen im Details-Panel anzuzeigen.
Bearbeite unter Gameplay-Tags die Eigenschaft Tags und füge dein Gameplay-Tag hinzu. In diesem Beispiel wird mytag zum Gerät hinzugefügt.
Du kannst zum selben Actor mehrere Tags hinzufügen, sodass jeder Actor gleichzeitig zu mehreren Gruppen gehören kann. Wenn du einen Actor mit mehreren Tags hast, kannst du anhand eines beliebigen Tags nach dem Actor suchen.
Zum Beispiel wird ein Actor mit den Tags mytag1 und mytag2 gefunden, wenn entweder GetCreativeObjectsWithTag(mytag1{}) oder GetCreativeObjectsWithTag(mytag2{}) aufgerufen wird.
Suchen nach Actors mit einem Gameplay-Tag
Sobald du Actors hast, denen Gameplay-Tags zugewiesen sind, kannst du sie während eines Spiels mit der Verse-Funktion GetCreativeObjectsWithTag() per Gameplay-Tag suchen. Im folgenden Beispiel führt der Aufruf von GetCreativeObjectsWithTag(mytag{}) dazu, dass TaggedDevices alle Actors enthält, denen mytag zugewiesen wurde:
TaggedActors := GetCreativeObjectsWithTag(mytag{})Der Aufruf der Funktion GetCreativeObjectsWithTag() gibt ein Array aller Objekte zurück, die creative_object_interface implementieren. Wenn du zum Beispiel mytag sowohl einem Schaltflächengerät als auch einem anpassbaren Licht-Gerät im Level zugewiesen hast, würde dieser Funktionsaufruf beide Geräte zurückgeben.
Du kannst das Ergebnis von GetCreativeObjectsWithTag() in eine der Implementierungsklassen konvertieren (sogenanntes Typ-Casting), indem du die Syntax NewObjectReference := object_type_to_cast_to[ObjectReference] verwendest, wobei object_type_to_cast_to der gewünschte Objekttyp ist. Wenn du zum Beispiel ein anpassbares Lichtgerät aus- oder einschalten willst, musst du das Ergebnis in customizable_light_device konvertieren, bevor du die Funktion TurnOff() oder TurnOn() aufrufst.
Typ-Casting ist ein fehlbarer Ausdruck, weil die Typkonvertierung fehlschlägt, wenn das Gerät nicht in diesen Typ konvertiert werden kann, z. B. wenn es ein anderer Gerätetyp ist. Du kannst beispielsweise ein Schaltflächengerät nicht in die Klasse customizable_light_device konvertieren, weil ein Schaltflächengerät und ein benutzerdefiniertes Lichtgerät nicht der gleiche Gerätetyp sind.
Mit for-Ausdrücken kannst du fehlbare Ausdrücke als Filter verwenden und neue Variablen erstellen, die du im for-Codeblock verwenden kannst. Du kannst zum Beispiel die Typkonvertierung von customizable_light_device zum Iterationsausdruck in for hinzufügen. Da das Gerät in customizable_light_device konvertiert wird, kannst du die spezifischen Funktionen dieser Klasse verwenden, z. B. TurnOff(), um das Licht auszuschalten.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()Das folgende Beispiel zeigt, wie man den Actor-Typ bedingt überprüft und je nach Typ verschiedene Funktionen aufruft. Das Beispiel prüft, ob es sich bei dem getaggten Actor um ein anpassbares Lichtgerät handelt, das TurnOff() aufrufen kann, um das Licht auszuschalten, oder ob es sich bei dem Actor um ein Barrieregerät handelt, das Disable() aufrufen kann, um es auszuschalten.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# If the tagged actor is a Customizable Light device, turn it off
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# If the tagged actor is a Barrier device, turn it off
BarrierDevice.Disable()Wenn du GetCreativeObjectsWithTag() aufrufst, ist die resultierende Liste nicht nach einer Methode geordnet, die du im Voraus kennen oder beeinflussen kannst. Wenn du zwischen den Aufrufen von GetCreativeObjectsWithTag() mit demselben Tag Actors hinzufügst oder entfernst, kann es sein, dass die Liste für jedes Aufrufergebnis in einer anderen Reihenfolge auftritt.
Wenn dein Spiel Actors in einer bestimmten Reihenfolge behandeln muss, solltest du ein editierbares Array anstelle von Gameplay-Tags verwenden, da das Ergebnis von GetCreativeObjectsWithTag() eine ungeordnete Liste von Actors ist.
Suchen nach Positionen nach Typ mit Gameplay-Tags
Hier ist ein Beispiel, wie die von GetCreativeObjectsWithTag() zurückgegebenen Actors nach Typ gefiltert und ihre Position ausgegeben werden.
# find all actors with the all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Print the position of all creative_prop actors with the all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Print the position of all device actors with the all_tag
for (Device:AllCreativeObjects):
Erkunden von Tutorials, die Gameplay-Tags verwenden
Die folgenden Tutorials zeigen, wie man Gameplay-Tags in einem Spiel verwendet.
Tagged Lights-Puzzle
Erstelle ein Rätsel, bei dem der Spieler mit einem in Verse erstellten Gerät die richtige Kombination aus ein- und ausgeschalteten Lichtern finden muss, um ein Item zu spawnen.