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 IU. Puedes copiar y pegar la secuencia de comandos completa al final de esta sección.
Sigue estos pasos para crear tu dispositivo de secuencia de título en Verse:
- Crea un nuevo dispositivo de Verse llamado title_sequence y añádelo a tu nivel. Consulta Crea tu propio dispositivo con Verse para obtener información.
- Añade los siguientes campos a tu dispositivo de Verse:
- Una constante editable del dispositivo de cámara de punto fijo llamada
SplashScreenGameCamera, que será la cámara para poder mostrar las pantallas de título. - Un dispositivo editable de cámara de punto fijo llamado
TitleGameCamera, que será la cámara para mostrar el título del juego. - Un dispositivo de diálogo emergente editable llamado
StartGameDialog, que mostrará la opción de diálogo para que el jugador elija iniciar el juego. - Un dispositivo editable de mensaje del HUD llamado
TitleScreen, que mostrará la IU del título del juego. - Un float editable llamado
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 de mensaje del HUD llamada
SplashScreens, que mostrará todas las pantallas de inicio antes de la pantalla de título. - Un dispositivo editable de control del HUD llamado
IntroHUDController, que es el control del HUD para ocultar todos los elementos de la IU del juego durante la introducción. - Un dispositivo editable de control del HUD llamado
GameHUDController, que es el control del HUD para mostrar todos los elementos de la IU del juego que aparecen cuando se inicia el juego. - Un dispositivo activador editable llamado
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 para mostrar pantallas de carga en la parte superior. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Cámara de juego para mostrar el título del juego en la parte superior. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Opción 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 carga para mostrar antes de la pantalla de título. @editable SplashScreens:[]hud_message_device = array{} # Control del HUD para ocultar todos los elementos de la IU del juego. @editable IntroHUDController:hud_controller_device = hud_controller_device{} # Control del HUD para mostrar todos los elementos de la IU del juego cuando se inicia. @editable GameHUDController:hud_controller_device = hud_controller_device{} # Método para notificar a cualquier dispositivo que el juego debe comenzar. @editable GameStart:trigger_device = trigger_device{} # Se ejecuta cuando el dispositivo se inicia en un juego en ejecución OnBegin<override>()<suspends>:void= - Una constante editable del dispositivo de cámara de punto fijo llamada
- Crea un método denominado
ShowTitleAndGameMenu()que tenga el especificador suspends. Con este método, se mostrará la cámara del título, se mostrará la pantalla de título, se esperará unos segundos (definidos por GameMenuDelay) antes de mostrar el diálogo de inicio del juego, y se esperará a que el jugador pulse el botón Iniciar partida en la IU.# Muestra la pantalla de título y la opción Iniciar 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 Iniciar partida. Sleep(GameMenuDelay) # Muestra el menú de inicio de juego StartGameDialog.Show() # Espera a que el jugador presione Iniciar partida antes de realizar cualquier otra acción. StartGameDialog.RespondingButtonEvent.Await() - Crea un método denominado
HideTitleAndGameMenu(). Con este método, se ocultará la pantalla de título y se 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(). Con este método, se iterará a través de todos los dispositivos de mensaje del HUD añadidos a la matrizSplashScreenspara mostrar la pantalla de carga, y se esperará tanto tiempo como se haya configurado la pantalla de carga en sus propiedades. Una vez mostradas todas las pantallas de carga, se deshabilitará la cámara para las pantallas de carga.# Muestra la serie de pantallas de carga. ShowSplashScreens()<suspends>:void= # Itera a través de todas las pantallas de carga. for (SplashScreen : SplashScreens): # Muestra cada pantalla de carga. SplashScreen.Show() # Espera el tiempo necesario para que se muestre la pantalla de carga. Sleep(SplashScreen.GetDisplayTime()) # Elimina la cámara del juego que se usa para mostrar las pantallas de carga. SplashScreenGameCamera.Disable() - Crea un método denominado
ToggleStasisForAllPlayers(). Este método iterará a través de todos los jugadores y los pondrá en reposo (para que no puedan moverse) si el argumentoShouldFreezeestrue, y los liberará del reposo (para que puedan moverse de nuevo) si el argumentoShouldFreezeesfalse.# Alterna el reposo del jugador. # Cuando ShouldFreeze es verdadero, todos los jugadores serán puestos en reposo. # Cuando ShouldFreeze es falso, todos los jugadores serán liberados del reposo. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Poner al jugador en reposo y no permitirle girar ni gesticular. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Libera al jugador del reposo. Character.ReleaseFromStasis() - Actualiza
OnBegin()para lo siguiente:- Habilitar el control del HUD de la introducción para ocultar todos los elementos de la IU del juego con
IntroHUDController.Enable(). - Poner a los jugadores en reposo para que no puedan moverse durante la introducción con
ToggleStasisForAllPlayers(true). - Mostrar la secuencia de pantallas de carga con
ShowSplashScreens(). - Ocultar el título y el menú del juego en el último segundo de esta función
OnBegin()usando la expresión defer y llamando aHideTitleAndGameMenu(). - Mostrar el título y el menú del juego con
ShowTitleAndGameMenu(). - Liberar a los jugadores del reposo con
ToggleStasisForAllPlayers(false). - Intercambiar los controles del HUD del HUD de la introducción al HUD del juego real.
- Por último, llamar a
GameStart.Trigger()para notificar a cualquier dispositivo que esté escuchando que el juego está comenzando.# Se ejecuta cuando el dispositivo se inicia en un juego ya ejecutado. OnBegin<override>()<suspends>:void= IntroHUDController.Enable() # Espera una actualización de simulación para que todo se inicialice. Sleep(0.0) # Poner a los jugadores en reposo para que no puedan moverse. ToggleStasisForAllPlayers(true) # Muestra la serie de pantallas de carga. ShowSplashScreens() # Oculta el título y el menú del juego en el último segundo. # Este defer se ejecuta cuando el bloque de código actual sale, # 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() # Libera a los jugadores del reposo para que puedan moverse de nuevo. ToggleStasisForAllPlayers(false) # Cambia los controles del HUD al HUD del juego real. IntroHUDController.Disable() GameHUDController.Enable() # ¡Notifica a los dispositivos que estén escuchando que el juego debe comenzar ahora! GameStart.Trigger()
- Habilitar el control del HUD de la introducción para ocultar todos los elementos de la IU del juego con
- Guarda tu archivo de Verse y compila tu código para actualizar tu dispositivo de Verse en el nivel.
Secuencia de comandos completa
A continuación se muestra el código completo para el dispositivo de secuencia de título en Verse.
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 para mostrar pantallas de carga en la parte superior.
@editable
SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Cámara de juego para mostrar el título del juego en la parte superior.
@editable
TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Opción 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 carga para mostrar antes de la pantalla de título.
@editable
SplashScreens:[]hud_message_device = array{}
# Control del HUD para ocultar todos los elementos de la IU del juego.
@editable
IntroHUDController:hud_controller_device = hud_controller_device{}
# Control del HUD para mostrar todos los elementos de la IU del juego cuando se inicia.
@editable
GameHUDController:hud_controller_device = hud_controller_device{}
# Método para notificar a cualquier dispositivo 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)
# Poner a los jugadores en reposo para que no puedan moverse.
ToggleStasisForAllPlayers(true)
# Muestra la serie de pantallas de carga.
ShowSplashScreens()
# Oculta el título y el menú del juego en el último segundo.
# Este defer se ejecuta cuando el bloque de código actual sale,
# 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()
# Libera a los jugadores del reposo para que puedan moverse de nuevo.
ToggleStasisForAllPlayers(false)
# Cambia los controles del HUD al HUD del juego real.
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 Iniciar 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 Iniciar partida.
Sleep(GameMenuDelay)
# Muestra el menú de inicio de juego
StartGameDialog.Show()
# Espera a que el jugador presione Iniciar partida antes de realizar cualquier otra acción.
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 carga.
ShowSplashScreens()<suspends>:void=
# Itera a través de todas las pantallas de carga.
for (SplashScreen : SplashScreens):
# Muestra cada pantalla de carga.
SplashScreen.Show()
# Espera el tiempo necesario para que se muestre la pantalla de carga.
Sleep(SplashScreen.GetDisplayTime())
# Elimina la cámara del juego que se usa para mostrar las pantallas de carga.
SplashScreenGameCamera.Disable()
# Alterna el reposo del jugador.
# Cuando ShouldFreeze es verdadero, todos los jugadores serán puestos en reposo.
# Cuando ShouldFreeze es falso, todos los jugadores serán liberados del reposo.
ToggleStasisForAllPlayers(ShouldFreeze:logic):void=
for:
Player : GetPlayspace().GetPlayers()
Character := Player.GetFortCharacter[]
do:
if (ShouldFreeze?):
# Poner al jugador en reposo y no permitirle girar ni gesticular.
Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false})
else:
# Libera al jugador del reposo.
Character.ReleaseFromStasis()