Nesta seção, você aprenderá a criar o dispositivo do Verse para gerenciar a temporização e as transições das visualizações da câmera e dos elementos da IU. Você pode copiar/colar o script completo no final desta seção.
Siga estas etapas para criar seu dispositivo Sequência de Títulos do Verse:
- Crie um novo dispositivo Verse chamado title_sequence e adicione-o ao seu nível. Consulte as etapas em: [Criar o próprio dispositivo usando Verse] (create-your-own-device-in-verse).
- Adicione os seguintes campos ao seu dispositivo Verse:
- Uma constante editável do dispositivo Câmera de Ponto Fixo chamada
SplashScreenGameCamera, que será a câmera para exibir as telas de título. - Um dispositivo Câmera de Ponto Fixo editável chamado
TitleGameCamera, que será a câmera para mostrar o título do jogo. - Um dispositivo Janela de Diálogo editável, chamado
StartGameDialog, que mostrará a opção de diálogo para o jogador escolher e iniciar o jogo. - Um dispositivo Mensagem do HUD editável chamado
TitleScreen, que mostrará a interface do título do jogo. - Um float editável chamado
GameMenuDelay, que define por quanto tempo a tela de título deve ser mostrada antes que o menu do jogo apareça. - Um conjunto editável de dispositivos Mensagem do HUD chamados
SplashScreens, que mostrarão todas as telas iniciais antes da tela de título. - Um dispositivo Controlador do HUD editável chamado
IntroHUDController, que é o Controlador do HUD para ocultar todos os elementos da IU no jogo durante a introdução. - Um dispositivo Controlador do HUD editável chamado
GameHUDController, que é o Controlador do HUD para mostrar todos os elementos da IU no jogo que aparecem quando o jogo começa. -
Um dispositivo Gatilho editável chamado
GameStart, que você pode usar para notificar qualquer dispositivo de que o jogo está começando.~~~(verse) using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Simulation }
title_sequence:= class(creative_device):
# Câmera do jogo para mostrar telas iniciais na parte superior. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Câmera do jogo para mostrar o título do jogo na parte superior. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Opção de diálogo a ser escolhida pelo jogador para iniciar o jogo. @editable StartGameDialog:popup_dialog_device = popup_dialog_device{}
# Tela de título do jogo a ser exibida. @editable TitleScreen:hud_message_device = hud_message_device{}
# Por quanto tempo a tela de título deve ser exibida antes de o menu do jogo aparecer. @editable GameMenuDelay:float = 2.5
# Telas iniciais a serem exibidas antes da tela de título. @editable SplashScreens:[]hud_message_device = array{}
# Controlador do HUD para ocultar todos os elementos da IU no jogo. @editable IntroHUDController:hud_controller_device = hud_controller_device{}
# Controlador do HUD para mostrar todos os elementos da IU no jogo quando este for iniciado. @editable GameHUDController:hud_controller_device = hud_controller_device{}
# Método para notificar qualquer dispositivo de que o jogo deve começar. @editable GameStart:trigger_device = trigger_device{}
# É executado quando o dispositivo é iniciado em um jogo em execução OnBegin
() :void= ~~~ - Uma constante editável do dispositivo Câmera de Ponto Fixo chamada
-
Crie um método chamado
ShowTitleAndGameMenu()que tenha o especificador suspends. Este método mostrará a câmera para o título, exibirá a tela de título, aguardará o valor de segundos definido em GameMenuDelay antes de mostrar a caixa de diálogo de início do jogo e aguardará até que o jogador pressione o botão Iniciar Jogo na interface de usuário. ~~~(verse) # Mostra a tela de título e a opção Começar Jogo. ShowTitleAndGameMenu():void= # Adicionar câmera de título a todos os jogadores. TitleGameCamera.AddToAll() # Mostrar a tela de título. TitleScreen.Show()
# Aguardar os segundos em GameMenuDelay antes de mostrar a opção Começar Jogo. Sleep(GameMenuDelay)
# Mostrar o menu Começar Jogo StartGameDialog.Show()
# Aguardar até que o jogador pressione Começar Jogo antes de fazer qualquer outra coisa. StartGameDialog.RespondingButtonEvent.Await() ~~~
- Crie um método chamado
HideTitleAndGameMenu(). Esse método ocultará a tela de título e removerá a câmera usada para o título. ~~~(verse) # Ocultar a tela de título e remove a câmera de todos os jogadores. HideTitleAndGameMenu():void= TitleScreen.Hide() TitleGameCamera.RemoveFromAll() ~~~ -
Crie um método chamado
ShowSplashScreens(). Esse método percorrerá todos os dispositivos Mensagem do HUD adicionados à matrizSplashScreenspara exibir a tela inicial e aguardará pelo tempo que a tela inicial tiver sido configurada para exibição em suas propriedades. Depois que todas as telas iniciais forem exibidas, a câmera das telas iniciais será desabilitada. ~~~(verse) # Mostrar a série de telas iniciais. ShowSplashScreens():void= # Percorre todas as telas iniciais. for (SplashScreen : SplashScreens): # Mostrar cada tela inicial. SplashScreen.Show() # Aguarde o tempo necessário para a exibição da tela inicial. Sleep(SplashScreen.GetDisplayTime()) # Remover a câmera do jogo que é usada para mostrar as telas iniciais. SplashScreenGameCamera.Disable() ~~~
- Crie um método chamado
ToggleStasisForAllPlayers(). Esse método percorrerá todos os jogadores e os colocará em congelamento (para que não possam se mover) se o argumentoShouldFreezefortrue, e os liberará do congelamento (para que possam se mover novamente) se o argumentoShouldFreezeforfalse. ~~~(verse) # Alternar o congelamento do jogador. # Quando ShouldFreeze for true, todos os jogadores serão colocados em congelamento. # Quando ShouldFreeze for false, todos os jogadores serão liberados do congelamento. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Colocar o jogador em congelamento e não permitir que ele se vire ou faça gestos. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Liberar o jogador do congelamento. Character.ReleaseFromStasis() ~~~ - Atualize
OnBegin()para:- Habilitar o Controlador do HUD para a introdução de forma a ocultar todos os elementos da IU no jogo com
IntroHUDController.Enable(). - Colocar os jogadores em congelamento para que não possam se mover durante a introdução com
ToggleStasisForAllPlayers(true). - Mostrar a sequência de telas iniciais com
ShowSplashScreens(). - Ocultar o título e o menu do jogo no último segundo dessa função
OnBegin()usando a expressão defer e chamandoHideTitleAndGameMenu(). - Mostrar o título e o menu do jogo com
ShowTitleAndGameMenu(). - Liberar os jogadores do congelamento com
ToggleStasisForAllPlayers(false). - Trocar os Controladores do HUD do HUD de introdução para o HUD do jogo propriamente dito.
-
Por último, chame
GameStart.Trigger()para notificar qualquer dispositivo que esteja ouvindo de que o jogo está começando. ~~~(verse) # É executado quando o dispositivo é iniciado em um jogo em execução OnBegin() :void= IntroHUDController.Enable() # Aguardar uma atualização da simulação para que tudo seja inicializado. Sleep(0.0)
# Colocar os jogadores em congelamento, para que eles não consigam se mover. ToggleStasisForAllPlayers(true)
# Mostrar a série de telas iniciais. ShowSplashScreens()
# Ocultar o título e o menu do jogo no último segundo. # Esse adiamento é executado quando o bloco de código atual é encerrado, # que é o fim desta função OnBegin, depois de GameStart.Trigger(). defer: HideTitleAndGameMenu()
# Mostrar o título e o menu do jogo. ShowTitleAndGameMenu()
# Liberar os jogadores do congelamento, para que eles possam se mover novamente. ToggleStasisForAllPlayers(false)
# Alterar controladores do HUD para o HUD real do jogo. IntroHUDController.Disable() GameHUDController.Enable()
# Notificar todos os dispositivos que estiverem ouvindo de que o jogo deve começar agora! GameStart.Trigger() ~~~
- Habilitar o Controlador do HUD para a introdução de forma a ocultar todos os elementos da IU no jogo com
- Salvar seu arquivo Verse e compilar seu código para atualizar seu dispositivo Verse no nível.
O script completo
Veja a seguir o código completo para o dispositivo Sequência de Títulos do Verse. ~~~(verse) using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Simulation }
title_sequence := class(creative_device):
# Câmera do jogo para mostrar telas iniciais na parte superior. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Câmera do jogo para mostrar o título do jogo na parte superior. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Opção de diálogo a ser escolhida pelo jogador para iniciar o jogo. @editable StartGameDialog:popup_dialog_device = popup_dialog_device{}
# Tela de título do jogo a ser exibida. @editable TitleScreen:hud_message_device = hud_message_device{}
# Por quanto tempo a tela de título deve ser exibida antes de o menu do jogo aparecer. @editable GameMenuDelay:float = 2.5
# Telas iniciais a serem exibidas antes da tela de título. @editable SplashScreens:[]hud_message_device = array{}
# Controlador do HUD para ocultar todos os elementos da IU no jogo. @editable IntroHUDController:hud_controller_device = hud_controller_device{}
# Controlador do HUD para mostrar todos os elementos da IU no jogo quando este for iniciado. @editable GameHUDController:hud_controller_device = hud_controller_device{}
# Método para notificar qualquer dispositivo de que o jogo deve começar. @editable GameStart:trigger_device = trigger_device{}
OnBegin
# Aguardar uma atualização da simulação para que tudo seja inicializado. Sleep(0.0)
# Colocar os jogadores em congelamento, para que eles não consigam se mover. ToggleStasisForAllPlayers(true)
# Mostrar a série de telas iniciais. ShowSplashScreens()
# Ocultar o título e o menu do jogo no último segundo. # Esse adiamento é executado quando o bloco de código atual é encerrado, # que é o fim desta função OnBegin, depois de GameStart.Trigger(). defer: HideTitleAndGameMenu()
# Mostrar o título e o menu do jogo. ShowTitleAndGameMenu()
# Liberar os jogadores do congelamento, para que eles possam se mover novamente. ToggleStasisForAllPlayers(false)
# Alterar controladores do HUD para o HUD real do jogo. IntroHUDController.Disable() GameHUDController.Enable()
# Notificar todos os dispositivos que estiverem ouvindo de que o jogo deve começar agora! GameStart.Trigger()
# Mostra a tela de título e a opção Começar Jogo.
ShowTitleAndGameMenu()
# Mostrar a tela de título. TitleScreen.Show()
# Aguardar os segundos em GameMenuDelay antes de mostrar a opção Começar Jogo. Sleep(GameMenuDelay)
# Mostrar o menu Começar Jogo StartGameDialog.Show()
# Aguardar até que o jogador pressione Começar Jogo antes de fazer qualquer outra coisa. StartGameDialog.RespondingButtonEvent.Await()
# Ocultar a tela de título e remove a câmera de todos os jogadores. HideTitleAndGameMenu():void= TitleScreen.Hide() TitleGameCamera.RemoveFromAll()
# Mostrar a série de telas iniciais.
ShowSplashScreens()
# Remover a câmera do jogo que é usada para mostrar as telas iniciais. SplashScreenGameCamera.Disable()
# Alternar o congelamento do jogador. # Quando ShouldFreeze for true, todos os jogadores serão colocados em congelamento. # Quando ShouldFreeze for false, todos os jogadores serão liberados do congelamento. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Colocar o jogador em congelamento e não permitir que ele se vire ou faça gestos. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Liberar o jogador do congelamento. Character.ReleaseFromStasis() ~~~