En esta sección, aprenderás a crear el dispositivo de Verse para gestionar la temporización y las transiciones de las vistas de cámara y los elementos de la interfaz de usuario. Puedes copiar y pegar la secuencia de comandos completa al final de esta sección.
Sigue estos pasos para crear tu dispositivo de Verse de secuencia de títulos:
- Crea un nuevo dispositivo de Verse llamado title_sequence y añádelo a tu nivel. Consulta Cómo crear tu propio dispositivo con Verse para ver los pasos.
- Añade los siguientes campos a tu dispositivo de Verse:
- Una constante de dispositivo cámara de punto fijo editable llamada
SplashScreenGameCamera
, que será la cámara contra la que se mostrarán las pantallas de título. - Un dispositivo Cámara de punto fijo editable nombrado
TitleGameCamera
, que será la cámara en la que se mostrará el título del juego. - Un dispositivo Diálogo emergente editable nombrado
StartGameDialog
, que mostrará la opción de diálogo para que el jugador elija iniciar el juego. - Un dispositivo editable Mensaje del HUD nombrado
TitleScreen
, que mostrará la interfaz de usuario del título del juego. - Un float editable nombrado
GameMenuDelay
, que define cuánto tiempo debe mostrarse la pantalla de título antes de que aparezca el menú del juego. - Una matriz editable de dispositivos Mensaje del HUD nombrada
SplashScreens
, que mostrará todas las pantallas de bienvenida antes de la pantalla de título. - Un dispositivo Controlador del HUD editable nombrado
IntroHUDController
, que es el controlador del HUD para ocultar todos los elementos de la interfaz de usuario del juego durante la introducción. - Un dispositivo Controlador del HUD editable nombrado
GameHUDController
, que es el controlador del HUD para mostrar todos los elementos de la interfaz de usuario del juego que aparecen al iniciar el juego. - Un dispositivo Activador editable nombrado
GameStart
, que puedes utilizar para notificar a cualquier dispositivo que el juego está comenzando.
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Simulation } title_sequence:= class(creative_device): # Cámara de juego que muestra pantallas de bienvenida encima. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Cámara de juego que muestra el título del juego encima. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Opción de cuadro de diálogo para que el jugador elija iniciar el juego. @editable StartGameDialog:popup_dialog_device = popup_dialog_device{} # Pantalla de título del juego para mostrar. @editable TitleScreen:hud_message_device = hud_message_device{} # Cuánto tiempo debe mostrarse la pantalla de título antes de que aparezca el menú del juego. @editable GameMenuDelay:float = 2.5 # Pantallas de bienvenida que se muestran antes de la pantalla de título. @editable SplashScreens:[]hud_message_device = array{} # Controlador del HUD para ocultar todos los elementos de la interfaz de usuario del juego. @editable IntroHUDController:hud_controller_device = hud_controller_device{} # Controlador del HUD para mostrar todos los elementos de la interfaz de usuario del juego cuando se inicia. @editable GameHUDController:hud_controller_device = hud_controller_device{} # Método para notificar a los dispositivos que el juego debe comenzar. @editable GameStart:trigger_device = trigger_device{} # Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void=
- Una constante de dispositivo cámara de punto fijo editable llamada
- Crea un método llamado
ShowTitleAndGameMenu()
que tenga el especificador suspends. Este método mostrará la cámara del título, mostrará la pantalla de título, esperará GameMenuDelay segundos antes de mostrar el diálogo de inicio del juego y esperará a que el jugador pulse el botón Iniciar en la IU.# Muestra la pantalla de título y la opción para iniciar la partida. ShowTitleAndGameMenu()<suspends>:void= # Añade la cámara del título a todos los jugadores. TitleGameCamera.AddToAll() # Muestra la pantalla de título. TitleScreen.Show() # Espera unos segundos (GameMenuDelay) antes de mostrar la opción para iniciar la partida. Sleep(GameMenuDelay) # Muestra el menú Iniciar. StartGameDialog.Show() # Espera a que el jugador pulse Iniciar antes de hacer cualquier otra cosa. StartGameDialog.RespondingButtonEvent.Await()
- Crea un método denominado
HideTitleAndGameMenu()
. Este método ocultará la pantalla de título y eliminará la cámara que se utiliza para el título.# Oculta la pantalla de título y quita la cámara a todos los jugadores. HideTitleAndGameMenu():void= TitleScreen.Hide() TitleGameCamera.RemoveFromAll()
- Crea un método denominado
ShowSplashScreens()
. Este método recorrerá todos los dispositivos «Mensaje del HUD» añadidos a la matrizSplashScreens
para mostrar la pantalla de bienvenida, y esperará tanto tiempo como se haya configurado la pantalla de bienvenida en sus propiedades. Una vez mostradas todas las pantallas de bienvenida, se deshabilita la cámara de las pantallas de bienvenida.# Muestra la serie de pantallas de bienvenida. ShowSplashScreens()<suspends>:void= # Itera todas las pantallas de bienvenida. for (SplashScreen : SplashScreens): # Muestra cada pantalla de bienvenida. SplashScreen.Show() # Espera el tiempo que deba mostrarse la pantalla de bienvenida. Sleep(SplashScreen.GetDisplayTime()) # Elimina la cámara del juego que se utiliza para mostrar las pantallas de bienvenida. SplashScreenGameCamera.Disable()
- Crea un método denominado
ToggleStasisForAllPlayers()
. Este método recorrerá todos los jugadores que entrarán en estasis (para que no se puedan mover) si el argumentoShouldFreeze
estrue
, y les sacará del estado de estasis (para que se puedan mover de nuevo) si el argumentoShouldFreeze
esfalse
.# Activa la inmovilidad del jugador. # Cuando ShouldFreeze se active, todos los jugadores quedarán inmovilizados. # Cuando ShouldFreeze sea `false`, se restaurará la movilidad en todos los jugadores. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Inmoviliza al jugador y no le permitas girar ni gesticular. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Restaura la movilidad del jugador. Character.ReleaseFromStasis()
- Actualiza
OnBegin()
para:- Activar el controlador del HUD de la introducción para ocultar todos los elementos de la interfaz de usuario del juego con
IntroHUDController.Enable()
. - Inmovilizar a los jugadores para que no puedan moverse durante la introducción con
ToggleStasisForAllPlayers(true)
. - Mostrar la secuencia de pantallas de bienvenida con
ShowSplashScreens()
. - Ocultar el título y el menú del juego en el último segundo de esta función
OnBegin()
utilizando la expresión defer y llamando aHideTitleAndGameMenu()
. - Mostrar el título y el menú del juego con
ShowTitleAndGameMenu()
. - Restaurar la movilidad de los jugadores con
ToggleStasisForAllPlayers(false)
. - Cambiar los controladores del HUD del HUD de la introducción al HUD real del juego.
- Por último, llamar a
GameStart.Trigger()
para notificar a los dispositivos que estén escuchando que el juego ha comenzado.# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void= IntroHUDController.Enable() # Espera una actualización de simulación para que todo se inicialice. Sleep(0.0) # Inmoviliza a los jugadores para que no puedan moverse. ToggleStasisForAllPlayers(true) # Muestra la serie de pantallas de bienvenida. ShowSplashScreens() # Oculta el título y el menú del juego en el último segundo. # Este `defer` se ejecuta cuando sale el bloque de código actual, # que es el final de esta función OnBegin, después de GameStart.Trigger(). defer: HideTitleAndGameMenu() # Muestra el título y el menú del juego. ShowTitleAndGameMenu() # Restaura la movilidad de los jugadores para que puedan moverse de nuevo. ToggleStasisForAllPlayers(false) # Cambia los controladores del HUD al HUD real del juego. IntroHUDController.Disable() GameHUDController.Enable() # ¡Notifica a los dispositivos que estén escuchando que el juego debe comenzar ahora! GameStart.Trigger()
- Activar el controlador del HUD de la introducción para ocultar todos los elementos de la interfaz de usuario del juego con
- Guardar tu archivo de Verse y compilar el código para actualizar tu dispositivo de Verse en el nivel.
Secuencia de comandos completa
A continuación se muestra el código completo del dispositivo de Verse de secuencia de títulos.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
title_sequence := class(creative_device):
# Cámara de juego que muestra pantallas de bienvenida encima.
@editable
SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Cámara de juego que muestra el título del juego encima.
@editable
TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Opción de cuadro de diálogo para que el jugador elija iniciar el juego.
@editable
StartGameDialog:popup_dialog_device = popup_dialog_device{}
# Pantalla de título del juego para mostrar.
@editable
TitleScreen:hud_message_device = hud_message_device{}
# Cuánto tiempo debe mostrarse la pantalla de título antes de que aparezca el menú del juego.
@editable
GameMenuDelay:float = 2.5
# Pantallas de bienvenida que se muestran antes de la pantalla de título.
@editable
SplashScreens:[]hud_message_device = array{}
# Controlador del HUD para ocultar todos los elementos de la interfaz de usuario del juego.
@editable
IntroHUDController:hud_controller_device = hud_controller_device{}
# Controlador del HUD para mostrar todos los elementos de la interfaz de usuario del juego cuando se inicia.
@editable
GameHUDController:hud_controller_device = hud_controller_device{}
# Método para notificar a los dispositivos que el juego debe comenzar.
@editable
GameStart:trigger_device = trigger_device{}
OnBegin<override>()<suspends>:void=
IntroHUDController.Enable()
# Espera una actualización de simulación para que todo se inicialice.
Sleep(0.0)
# Inmoviliza a los jugadores para que no puedan moverse.
ToggleStasisForAllPlayers(true)
# Muestra la serie de pantallas de bienvenida.
ShowSplashScreens()
# Oculta el título y el menú del juego en el último segundo.
# Este `defer` se ejecuta cuando sale el bloque de código actual,
# que es el final de esta función OnBegin, después de GameStart.Trigger().
defer:
HideTitleAndGameMenu()
# Muestra el título y el menú del juego.
ShowTitleAndGameMenu()
# Restaura la movilidad de los jugadores para que puedan moverse de nuevo.
ToggleStasisForAllPlayers(false)
# Cambia los controladores del HUD al HUD real del juego.
IntroHUDController.Disable()
GameHUDController.Enable()
# ¡Notifica a los dispositivos que estén escuchando que el juego debe comenzar ahora!
GameStart.Trigger()
# Muestra la pantalla de título y la opción para iniciar la partida.
ShowTitleAndGameMenu()<suspends>:void=
# Añade la cámara del título a todos los jugadores.
TitleGameCamera.AddToAll()
# Muestra la pantalla de título.
TitleScreen.Show()
# Espera unos segundos (GameMenuDelay) antes de mostrar la opción para iniciar la partida.
Sleep(GameMenuDelay)
# Muestra el menú Iniciar.
StartGameDialog.Show()
# Espera a que el jugador pulse Iniciar antes de hacer cualquier otra cosa.
StartGameDialog.RespondingButtonEvent.Await()
# Oculta la pantalla de título y quita la cámara a todos los jugadores.
HideTitleAndGameMenu():void=
TitleScreen.Hide()
TitleGameCamera.RemoveFromAll()
# Muestra la serie de pantallas de bienvenida.
ShowSplashScreens()<suspends>:void=
# Itera todas las pantallas de bienvenida.
for (SplashScreen : SplashScreens):
# Muestra cada pantalla de bienvenida.
SplashScreen.Show()
# Espera el tiempo que deba mostrarse la pantalla de bienvenida.
Sleep(SplashScreen.GetDisplayTime())
# Elimina la cámara del juego que se utiliza para mostrar las pantallas de bienvenida.
SplashScreenGameCamera.Disable()
# Activa la inmovilidad del jugador.
# Cuando ShouldFreeze se active, todos los jugadores quedarán inmovilizados.
# Cuando ShouldFreeze sea `false`, se restaurará la movilidad en todos los jugadores.
ToggleStasisForAllPlayers(ShouldFreeze:logic):void=
for:
Player : GetPlayspace().GetPlayers()
Character := Player.GetFortCharacter[]
do:
if (ShouldFreeze?):
# Inmoviliza al jugador y no le permitas girar ni gesticular.
Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false})
else:
# Restaura la movilidad del jugador.
Character.ReleaseFromStasis()