In den folgenden Abschnitten wird gezeigt, wie du ein Widget zur Benutzeroberfläche eines Spielers hinzufügst und ein Widget entfernst.
Diese Beispiele verwenden ein Textblock-Widget, aber du kannst jede Art von Widget verwenden. Unter Widget-Typen findest du alle Arten von Widgets, die du verwenden kannst.
Hinzufügen eines Widgets
Dieses Beispiel zeigt, wie man ein Widget hinzufügt, wenn ein Spieler mit einem Schaltflächengerät im Level interagiert:
Erstelle ein neues Verse-Gerät und füge es dem Level hinzu. Wie du ein neues Gerät in Verse erstellen kannst, erfährst du unter Erstellen deines eigenen Geräts mit Verse.
Öffne deine Verse-Datei mit dem Verse-Explorer in Visual Studio Code.
Füge deinem Verse-Gerät eine bearbeitbare Schaltflächen-Geräteeigenschaft hinzu und richte den Verweis auf das Schaltflächen-Gerät in deinem Level ein. Wie du bearbeitbare Eigenschaften erstellen kannst, erfährst du unter Anpassen von Geräteeigenschaften.
# Stelle das Schaltflächengerät im Editor so ein, dass es auf das Gerät im Level verweist. @editable MyButton : button_device = button_device{}Füge am Anfang deiner Verse-Datei die folgenden Zeilen hinzu, um die Verse-UI-API zu verwenden:
verwendet { /UnrealEngine.com/Temporary/UI } verwendet { /Fortnite.com/UI } verwendet { /UnrealEngine.com/Temporary/SpatialMath}Diese Benutzeroberfläche gilt nur pro Spieler, du brauchst also eine Referenz auf einen Spieler, um auf seine Benutzeroberfläche zuzugreifen. In diesem Beispiel wird gezeigt, wie eine benutzerdefinierte Benutzeroberfläche angezeigt werden kann, wenn der Spieler mit einer Schaltfläche interagiert, da Ereignisse für Geräte einen Verweis auf den Spieler enthalten, der mit dem Gerät interagiert hat. Wie du Event-Abonnements einrichtest, erfährst du unter Codieren von Geräteinteraktionen.
# Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird OnBegin<override>()<suspends> : void = MyButton.InteractedWithEvent.Subscribe(HandleButtonInteraction) # Eine benutzerdefinierte Benutzeroberfläche kann nur mit einem bestimmten Spieler verknüpft werden, und nur dieser Spieler kann sie sehen. HandleButtonInteraction(Agent : agent) : void = # UI anzeigenJetzt kannst du die fehlbare Funktion
GetPlayerUI[]in einem if-Ausdruck aufrufen, um einen Verweis auf die Benutzeroberfläche des Spielers zu erhalten.Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): # Display UIMit dem Verweis auf die UI des Spielers kannst du
AddWidget()aufrufen, um dein Widget hinzuzufügen.Erstelle eine Nachricht namens TextForMyUI mit der Spezifikation
localizesund initialisiere sie mit dem String"Hello, world!".hello_world_device := class(creative_device): # Stelle das Schaltflächengerät im Editor so ein, dass es auf das Gerät im Level verweist. @editable MyButton : button_device = button_device{} # Eine lokalisierbare Nachricht, die als Text in der Benutzeroberfläche angezeigt wird. TextForMyUI<localizes> : message = "Hallo, Welt!"
Der Typ
messagebedeutet, dass der Text lokalisiert werden kann, und der String, den du zum Initialisieren einermessage-Variablen verwendest, ist der Standardtext und die Standardsprache für die Nachricht. Weitere Informationen über den Typmessageerfährst du in der Verse-Sprachen-Kurzübersicht.Erstelle dann ein Textwidget mit
TextForMyUIals Standardtext und füge es zur Benutzeroberfläche des Spielers hinzu.Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): MyUI : text_block = text_block{DefaultText := TextFOrMyUI} PlayerUI.AddWidget(MyUI)
Hier der vollständige Code:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath} hello_world_device := class(creative_device): # Set the Button device in the Editor to reference the device in the level @editableSpeichere deine Verse-Datei und wähle im UEFN-Hauptmenü die Option Verse > Verse-Scripts erstellen, um dein Verse-Gerät zu aktualisieren.
Wenn du dein Level mit diesem Verse-Gerät testest, erscheint der Text "Hallo, Welt!" in der oberen linken Ecke des Bildschirms, wenn der Spieler mit dem Schaltflächengerät interagiert.
Entfernen eines Widgets
In diesem Beispiel wird gezeigt, wie die Benutzeroberfläche vom Bildschirm des Spielers entfernt werden kann, wenn dieser wieder mit dem Schaltflächengerät interagiert:
Öffne die Verse-Datei, die du in Hinzufügen eines Widgets erstellt hast.
Um das Widget später wieder entfernen zu können, wenn der Spieler erneut mit dem Knopf interagiert, musst du das Widget in einer Variablen speichern, damit du es später referenzieren kannst. Da Widgets nur pro Spieler angezeigt werden, musst du das Widget speichern und es mit dem Spieler verknüpfen, für den es angezeigt wird, damit du das richtige Widget für den richtigen Spieler auswählen kannst.
Erstelle eine Map-Variable namens
MaybeMyUIPerPlayer, dieplayerals Schlüssel und einen optionalen Textblock als Widget-Wert in der Map verwendet. (Hinweis: In diesem Beispiel wird ein Textblock-Widget verwendet, aber du kannst jede Art von Widget verwenden).var MaybeMyUIPerPlayer : [player]?text_block = map{}Wenn du das Widget zur Benutzeroberfläche des Spielers hinzufügst, speicherst du es in der Variablen
MaybeMyUIPerPlayer, damit du es später wieder vom Bildschirm entfernen kannst. Da der Zugriff auf ein Element in einer Map ein fehlbarer Ausdruck ist, muss das Setzen des Wertes des Widgets in Bezug auf den Spieler in einem Fehlerkontext wie einemif-Ausdruck aufgerufen werden.Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): NewUI := text_block{DefaultText := TextForMyUI} PlayerUI.AddWidget(NewUI) if (set MaybeMyUIPerPlayer[InPlayer] = option{NewUI}) {}Aktualisiere nun die Funktion, um zu prüfen, ob für den Spieler bereits ein Widget in
MaybeMyUIPerPlayerangezeigt wird. Wenn ja, dann entferne das Widget. Wenn nicht, dann erstelle ein neues Widget, das er sehen kann.Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): if (MyUI := MaybeMyUIPerPlayer[InPlayer]?): PlayerUI.RemoveWidget(MyUI) if (set MaybeMyUIPerPlayer[InPlayer] = false) {} else: NewUI := text_block{DefaultText := TextForMyUI}Hier der vollständige Code:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath} hello_world_device := class(creative_device): # Set the Button device in the Editor to reference the device in the level @editableSpeichere deine Verse-Datei und wähle im UEFN-Hauptmenü die Option Verse > Verse-Scripts erstellen, um dein Verse-Gerät zu aktualisieren.
Wenn du dein Level mit diesem Verse-Gerät testest, erscheint der Text "Hallo, Welt!" in der oberen linken Ecke des Bildschirms, wenn der Spieler zum ersten Mal mit dem Schaltflächengerät interagiert. Der Text verschwindet, wenn der Spieler erneut mit dem Schaltflächengerät interagiert.