Widżety mogą być interaktywne dzięki następującym metodom:
Dodanie argumentu
player_ui_slot{InputMode := ui_input_mode.All }podczas dodawania widżetu za pomocą funkcjiAddWidget().Powiązanie procedury obsługi zdarzeń ze zdarzeniem widżetu.
Obecnie interaktywne mogą być następujące widżety:
W poniższych sekcjach znajdziesz przykłady, jak sprawić, by widżety te były interaktywne.
Interakcje z przyciskiem
Postępuj zgodnie z poniższą instrukcją, aby utworzyć UI z przyciskiem i dodać zachowanie, które powoduje wyświetlenie tekstu wybranego przycisku na ekranie, gdy gracz wchodzi w interakcję z przyciskiem:
Otwórz plik Verse utworzony w sekcji Usuwanie widżetu.
Utwórz funkcję o nazwie
CreateMyUI(), w której utworzysz UI.CreateMyUI() : canvas = MyUIButton : button_loud = button_loud{DefaultText := TextForMyUI} MyInteractableButtons : canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.5}, Maximum := vector2{X := 0.5, Y := 0.5}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUIButton return MyInteractableButtonsZmień typ dla
MaybeMyUIPerPlayerto[player]?canvas:var MaybeMyUIPerPlayer : [player]?canvas = map{}Zmień przypisanie dla
NewUI, aby wywołać nową funkcjęCreateMyUI().Verse# UI are added per Player. HandleButtonInteraction(Agent : agent) : void = if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): if (MyUI := MaybeMyUIPerPlayer[InPlayer]?): PlayerUI.RemoveWidget(MyUI) if (set MaybeMyUIPerPlayer[InPlayer] = false) {} else: NewUI := CreateMyUI() PlayerUI.AddWidget(NewUI) if (set MaybeMyUIPerPlayer[InPlayer] = option{NewUI}) {}Dodaj argument
player_ui_slot{InputMode := ui_input_mode.All}podczas dodawania nowego widżetu, aby gracz mógł użyć kursora na kanwie po jej utworzeniu.Verse# UI are added per Player. HandleButtonInteraction(Agent : agent) : void = if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): if (MyUI := MaybeMyUIPerPlayer[InPlayer]?): PlayerUI.RemoveWidget(MyUI) if (set MaybeMyUIPerPlayer[InPlayer] = false) {} else: NewUI := CreateMyUI() PlayerUI.AddWidget(NewUI, player_ui_slot{InputMode := ui_input_mode.All}) if (set MaybeMyUIPerPlayer[InPlayer] = option{NewUI}) {}Wszystkie przyciski UI mają zdarzenie
nasłuchiwalne`OnClick(), które możesz subskrybować. Procedura obsługi zdarzeń powinna mieć typ zwracanyvoidi jeden parametr typuwidget_message.CreateMyUI() : canvas = MyUIButton : button_loud = button_loud{DefaultText := TextForMyUI} MyUIButton.OnClick().Subscribe(HandleSelectedUIButton) MyInteractableButtons : canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.5}, Maximum := vector2{X := 0.5, Y := 0.5}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUIButton return MyInteractableButtons HandleSelectedUIButton(Message : widget_message) : void = # Określ, co się stanie, gdy gracz naciśnie przyciskW
HandleSelectedUIButton, wyświetl tekst przycisku na ekranie i usuń widżet z ekranu. Elementwidget_messagewie, który gracz i element UI go wybrał, więc możesz użyć tej informacji, aby pobrać tekst przycisku i znaleźć widżet, który jest wyświetlany graczowi, aby usunąć go z ekranu.VerseHandleSelectedUIButton(Message : widget_message) : void = if (PlayerUI := GetPlayerUI[Message.Player], MyUI := MaybeMyUIPerPlayer[Message.Player]?, SelectedButton := text_button_base[Message.Source]): Print("Player selected {SelectedButton.GetText()}") PlayerUI.RemoveWidget(MyUI) if (set MaybeMyUIPerPlayer[Message.Player] = false) {}Poniżej znajduje się kompletny kod ilustrujący ten przykład.
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 @editable
Interakcje z suwakiem
Postępuj zgodnie z poniższą instrukcją, aby utworzyć UI z suwakiem i dodać zachowanie, które powoduje wyświetlenie ustawionej wartości na ekranie, gdy gracz wchodzi w interakcję z suwakiem:
Otwórz plik Verse utworzony w sekcji Interakcje z przyciskiem.
Zaktualizuj funkcję o nazwie
CreateMyUI()za pomocą suwaka.CreateMyUI() : canvas = MyUIButton : button_loud = button_loud{DefaultText := TextForMyUI} MyUIButton.OnClick().Subscribe(HandleSelectedUIButton) MyUISlider : slider_regular = slider_regular: DefaultValue := 5.0 DefaultMinValue := 0.0 DefaultMaxValue := 10.0 DefaultStepSize := 0.5 MyInteractableWidgets : canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.5}, Maximum := vector2{X := 0.5, Y := 0.5}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUISlider canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.6}, Maximum := vector2{X := 0.5, Y := 0.6}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUIButton return MyInteractableWidgetsWszystkie suwaki UI mają zdarzenie
nasłuchiwalneOnValueChanged(), które możesz subskrybować. Procedura obsługi zdarzeń powinna mieć typ zwracanyvoidi jeden parametr typuwidget_message.CreateMyUI() : canvas = MyUIButton : button_loud = button_loud{DefaultText := TextForMyUI} MyUIButton.OnClick().Subscribe(HandleSelectedUIButton) MyUISlider : slider_regular = slider_regular: DefaultValue := 5.0 DefaultMinValue := 0.0 DefaultMaxValue := 10.0 DefaultStepSize := 0.5 MyUISlider.OnValueChanged().Subscribe(HandleValueChangedUISlider) MyInteractableWidgets : canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.5}, Maximum := vector2{X := 0.5, Y := 0.5}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUISlider canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.25, Y := 0.6}, Maximum := vector2{X := 0.5, Y := 0.6}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 0.5} SizeToContent := true Widget := MyUIButton return MyInteractableWidgets HandleValueChangedUISlider(Message : widget_message) : void = # Określ, co się stanie, gdy gracz zmieni wartość suwakaW
HandleValueChangedUISliderwyświetl wartość suwaka na ekranie. Elementwidget_messagewie, który gracz wszedł w interakcję i który element UI wybrał, więc możesz użyć tej informacji, aby pobrać wartość suwaka i znaleźć widżet, który jest wyświetlany graczowi.VerseHandleValueChangedUISlider(Message : widget_message) : void = if: PlayerUI := GetPlayerUI[Message.Player] MyUI := MaybeMyUIPerPlayer[Message.Player]? ChangedSlider := slider_regular[Message.Source] then: Print("Player changed slider value to {ChangedSlider.GetValue()}")Poniżej znajduje się kompletny kod ilustrujący ten przykład.
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath } interactable_slider := class(creative_device): # Set the Button device in the Editor to reference the device in the level @editable