As seções a seguir mostram como adicionar e remover um widget da IU de um jogador.
Estes exemplos usam um widget de bloco de texto, mas você pode usar qualquer tipo de widget. Consulte Tipos de widgets para conhecer todos os tipos de widgets que você pode usar.
Como adicionar um widget
Este exemplo mostra como adicionar um widget quando um jogador interage com um Dispositivo de botão no nível:
Crie um novo dispositivo do Verse e adicione-o ao nível. Para saber como criar um novo dispositivo Verse, consulte Crie seu próprio dispositivo usando Verse.
Abra seu arquivo Verse no Visual Studio Code com o Explorador de Verse.
Adicione uma propriedade de dispositivo de botão editável ao seu dispositivo do Verse e configure a referência para o dispositivo de botão no seu nível. Para saber como criar propriedades editáveis, consulte Personalizar propriedades de dispositivos.
# Defina o dispositivo Botão no Editor para referenciar o dispositivo no nível @editable MyButton : button_device = button_device{}Na parte superior do arquivo Verse, adicione as seguintes linhas para usar a API da IU do Verse:
using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath}Como essa IU é apenas por jogador, você precisará de uma referência a um jogador para acessar a IU correspondente. Este exemplo mostra como exibir uma IU personalizada quando o jogador interage com um botão, pois os eventos para dispositivos incluem uma referência ao jogador que interagiu com o dispositivo. Para saber como configurar inscrições em eventos, consulte Como programar interações entre dispositivos.
# Executado quando o dispositivo é iniciado em um jogo em execução OnBegin<override>()<suspends> : void = MyButton.InteractedWithEvent.Subscribe(HandleButtonInteraction) # Uma IU personalizada só pode ser associada a um jogador específico, e apenas esse jogador pode vê-la HandleButtonInteraction(Agent : agent) : void = # Exibir a IUAgora, você pode chamar a função falível
GetPlayerUI[]if para obter uma referência à IU do jogador.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 UICom a referência à IU do jogador, você pode chamar
AddWidget()para adicionar seu widget.Crie uma mensagem chamada TextForMyUI que tenha o especificador
localizese inicialize-a com a string"Olá, mundo!".hello_world_device := class(creative_device): # Defina o dispositivo Botão no Editor para referenciar o dispositivo no nível @editable MyButton : button_device = button_device{} # Uma mensagem localizável para exibir como texto na IU TextForMyUI<localizes> : message = "Olá, mundo!"
O tipo
messagesignifica que o texto pode ser localizado, e a string que você usa para inicializar uma variávelmessageé o texto e o idioma padrão da mensagem. Para saber mais sobre o tipomessage, consulte a Referência rápida da linguagem Verse.Em seguida, crie um widget de texto com
TextForMyUIcomo texto padrão e adicione-o à IU do jogador.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)
Veja a seguir o código completo:
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 @editableSalve o arquivo Verse e escolha Verse > Compilar código Verse no menu principal do UEFN para atualizar seu dispositivo Verse.
Quando você testar seu nível com esse dispositivo do Verse, o texto "Olá, mundo!" aparecerá no canto superior esquerdo da tela sempre que o jogador interagir com o dispositivo Botão.
Como remover um widget
Este exemplo mostra como remover a IU da tela do jogador quando ele interagir com o dispositivo Botão novamente:
Abra o arquivo Verse que você criou em Como adicionar um widget.
Para conseguir remover o widget mais tarde, quando o jogador interagir com o botão novamente, você precisará armazenar o widget em uma variável para poder referenciá-lo posteriormente. Como os widgets são exibidos apenas por jogador, você precisará armazenar o widget e associá-lo ao jogador para o qual está sendo exibido, para poder pegar o widget certo para o jogador certo.
Crie uma variável map chamada
MaybeMyUIPerPlayerque use ojogadorcomo a chave e um bloco de texto opcional (option-in-verse) como o valor do widget no mapa. (Observe que este exemplo usa um widget de bloco de texto, mas você pode usar qualquer tipo de widget.)var MaybeMyUIPerPlayer : [player]?text_block = map{}Ao adicionar o widget à IU do jogador, armazene seu widget na variável
MaybeMyUIPerPlayer, para que você possa removê-lo posteriormente da tela. Como acessar um elemento em um mapa é uma expressão falível, definir o valor do widget em relação ao jogador deve ser chamado em um contexto de falha, como umaif.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}) {}Agora, atualize a função para verificar se já há um widget sendo exibido para o jogador em
MaybeMyUIPerPlayer. Se já houver, remova o widget. Caso contrário, crie um novo widget para ser visto por ele.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}Veja a seguir o código completo:
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 @editableSalve o arquivo Verse e escolha Verse > Compilar código Verse no menu principal do UEFN para atualizar seu dispositivo Verse.
Quando você testar seu nível com esse dispositivo do Verse, o texto "Olá, mundo!" aparecerá no canto superior esquerdo da tela quando o jogador interagir pela primeira vez com o dispositivo Botão. O texto desaparecerá quando o jogador interagir com o dispositivo Botão novamente.