Dans cette rubrique, vous apprendrez à créer l'appareil Verse permettant de gérer la synchronisation et les transitions des vues de la caméra et des éléments de l'interface utilisateur. Vous pouvez copier-coller le script complet à la fin de cette rubrique.
Procédez comme suit pour créer votre appareil Séquence de titres Verse :
- Créez un nouvel appareil Verse nommé title_sequence et ajoutez-le à votre niveau. Consultez la rubrique Créer votre propre appareil avec Verse pour connaître la procédure détaillée.
- Ajoutez les champs suivants à votre appareil Verse :
- Une constante de caméra : point fixe modifiable nommée
SplashScreenGameCamera, c'est-à-dire la caméra d'affichage des écrans de titre. - Une caméra : point fixe modifiable nommé
TitleGameCamera, c'est-à-dire la caméra d'affichage du titre du jeu. - Un appareil de fenêtre pop-up modifiable nommé
StartGameDialog, qui sert à afficher l'option permettant au joueur de choisir de démarrer le jeu. - Un appareil de message d'ATH modifiable nommé
TitleScreen, qui sert à afficher l'IU du titre du jeu. - Un float modifiable nommé
GameMenuDelay, qui définit la durée d'affichage de l'écran de titre avant l'apparition du menu du jeu. - Une matrice modifiable d'appareils de message d'ATH nommée
SplashScreens, qui sert à afficher tous les écrans de démarrage avant l'écran de titre. - Un appareil Contrôleur d'ATH modifiable nommé
IntroHUDController, c'est-à-dire le contrôleur d'ATH permettant de masquer tous les éléments de l'interface utilisateur du jeu pendant l'introduction. - Un appareil Contrôleur d'ATH modifiable nommé
GameHUDController, à savoir le contrôleur d'ATH permettant d'afficher tous les éléments d'interface utilisateur qui apparaissent au démarrage du jeu. - Un appareil Déclencheur modifiable nommé
GameStart, que vous pouvez utiliser pour informer tout appareil du démarrage du jeu.
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Simulation } title_sequence:= class(creative_device): # Caméra de jeu sur laquelle afficher les écrans de démarrage. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Caméra de jeu sur laquelle afficher le titre du jeu. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Option de fenêtre pop-up permettant au joueur de démarrer le jeu. @editable StartGameDialog:popup_dialog_device = popup_dialog_device{} # Écran de titre du jeu à afficher. @editable TitleScreen:hud_message_device = hud_message_device{} # Durée d'affichage de l'écran de titre avant l'apparition du menu du jeu. @editable GameMenuDelay:float = 2.5 # Écrans de démarrage à afficher avant l'écran de titre. @editable SplashScreens:[]hud_message_device = array{} # Contrôleur d'ATH pour masquer tous les éléments de l'interface utilisateur du jeu. @editable IntroHUDController:hud_controller_device = hud_controller_device{} # Contrôleur d'ATH pour afficher tous les éléments de l'interface utilisateur du jeu au démarrage de la partie. @editable GameHUDController:hud_controller_device = hud_controller_device{} # Méthode pour informer tous les appareils que le jeu doit commencer. @editable GameStart:trigger_device = trigger_device{} # S'exécute à l'activation de l'appareil dans une partie en cours. OnBegin<override>()<suspends>:void= - Une constante de caméra : point fixe modifiable nommée
- Créez une méthode nommée
ShowTitleAndGameMenu()dotée du spécificateur suspends. Cette méthode affiche la caméra de titre, affiche l'écran de titre, attend le nombre de secondes spécifié dans le paramètre GameMenuDelay avant d'afficher la fenêtre de démarrage du jeu et attend que le joueur appuie sur le bouton Lancer le jeu dans l'interface utilisateur.# Afficher l'écran de titre et l'option Lancer le jeu. ShowTitleAndGameMenu()<suspends>:void= # Ajouter la caméra de titre à tous les joueurs TitleGameCamera.AddToAll() # Afficher l'écran de titre TitleScreen.Show() # Attendre le nombre de secondes spécifié dans GameMenuDelay avant d'afficher l'option Lancer le jeu Sleep(GameMenuDelay) # Afficher le menu Lancer le jeu StartGameDialog.Show() # Attendre que le joueur appuie sur Lancer le jeu avant toute autre action StartGameDialog.RespondingButtonEvent.Await() - Créez une méthode nommée
HideTitleAndGameMenu(). Cette méthode permet de masquer l'écran de titre et de supprimer la caméra utilisée pour le titre.# Masquer l'écran de titre et supprimer la caméra pour tous les joueurs. HideTitleAndGameMenu():void= TitleScreen.Hide() TitleGameCamera.RemoveFromAll() - Créez une méthode nommée
ShowSplashScreens(). Cette méthode itère tous les appareils de message d'ATH ajoutés à la matriceSplashScreenspour afficher l'écran de démarrage et respecte la durée d'affichage de l'écran de démarrage spécifiée dans ses propriétés. Une fois tous les écrans de démarrage affichés, la caméra pour les écrans de démarrage est désactivée.# Afficher la série d'écrans de démarrage. ShowSplashScreens()<suspends>:void= # Itérer tous les écrans de démarrage. for (SplashScreen : SplashScreens): # Afficher chaque écran de démarrage. SplashScreen.Show() # Attendre le temps nécessaire à l'affichage de l'écran de démarrage. Sleep(SplashScreen.GetDisplayTime()) # Supprimer la caméra du jeu qui sert à afficher les écrans de démarrage. SplashScreenGameCamera.Disable() - Créez une méthode nommée
ToggleStasisForAllPlayers(). Cette méthode itère tous les joueurs et les met en stase (pour qu'ils ne puissent pas bouger) si l'argumentShouldFreezeesttrue, puis les libère de la stase (pour qu'ils puissent bouger à nouveau) si l'argumentShouldFreezeestfalse.# Activer/Désactiver la stase des joueurs. # Lorsque l'argument ShouldFreeze est activé (`true`), tous les joueurs sont placés en stase. # Lorsque l'argument ShouldFreeze est désactivé (`false`), tous les joueurs quittent la stase. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Placer le joueur en stase et ne pas lui permettre de tourner ni d'effectuer une emote. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Libérer le joueur de la stase. Character.ReleaseFromStasis() - Modifiez
OnBegin()comme suit :- Activer le contrôleur d'ATH et masquer tous les éléments de l'interface utilisateur du jeu à l'introduction avec
IntroHUDController.Enable(). - Placer les joueurs en stase pour qu'ils ne puissent pas bouger pendant l'introduction avec
ToggleStasisForAllPlayers(true). - Afficher la séquence d'écrans de démarrage avec
ShowSplashScreens(). - Masquer le titre et le menu du jeu à la toute dernière seconde de cette fonction
OnBegin()en utilisant l'expression defer et en appelantHideTitleAndGameMenu(). - Afficher le titre et le menu du jeu avec
ShowTitleAndGameMenu(). - Libérer les joueurs de la stase avec
ToggleStasisForAllPlayers(false). - Remplacer les contrôleurs d'ATH de l'ATH d'introduction par ceux de l'ATH du jeu proprement dit.
- Enfin, appeler
GameStart.Trigger()pour informer tous les appareils qui écoutent que le jeu commence.# S'exécute à l'activation de l'appareil dans une partie en cours. OnBegin<override>()<suspends>:void= IntroHUDController.Enable() # Attendre une mise à jour de simulation pour que tout s'initialise. Sleep(0.0) # Placer les joueurs en stase pour qu'ils ne puissent pas bouger. ToggleStasisForAllPlayers(true) # Afficher la série d'écrans de démarrage. ShowSplashScreens() # Masquer le titre et le menu du jeu à la toute dernière seconde. # Cette expression defer s'exécute à la fin du bloc de code actuel, # c'est-à-dire à la fin de cette fonction OnBegin, après GameStart.Trigger(). defer: HideTitleAndGameMenu() # Afficher le titre et le menu du jeu. ShowTitleAndGameMenu() # Libérer les joueurs de la stase pour qu'ils puissent à nouveau bouger. ToggleStasisForAllPlayers(false) # Remplacer les contrôleurs d'ATH par les ATH du jeu. IntroHUDController.Disable() GameHUDController.Enable() # Informer tous les appareils qui écoutent que le jeu doit maintenant commencer. GameStart.Trigger()
- Activer le contrôleur d'ATH et masquer tous les éléments de l'interface utilisateur du jeu à l'introduction avec
- Enregistrez votre fichier Verse et compilez votre code pour mettre à jour votre appareil Verse dans le niveau.
Script complet
Voici le code complet de l'appareil Séquence de titres Verse.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
title_sequence := class(creative_device):
# Caméra de jeu sur laquelle afficher les écrans de démarrage.
@editable
SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Caméra de jeu sur laquelle afficher le titre du jeu.
@editable
TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Option de fenêtre pop-up permettant au joueur de démarrer le jeu.
@editable
StartGameDialog:popup_dialog_device = popup_dialog_device{}
# Écran de titre du jeu à afficher.
@editable
TitleScreen:hud_message_device = hud_message_device{}
# Durée d'affichage de l'écran de titre avant l'apparition du menu du jeu.
@editable
GameMenuDelay:float = 2.5
# Écrans de démarrage à afficher avant l'écran de titre.
@editable
SplashScreens:[]hud_message_device = array{}
# Contrôleur d'ATH pour masquer tous les éléments de l'interface utilisateur du jeu.
@editable
IntroHUDController:hud_controller_device = hud_controller_device{}
# Contrôleur d'ATH pour afficher tous les éléments de l'interface utilisateur du jeu au démarrage de la partie.
@editable
GameHUDController:hud_controller_device = hud_controller_device{}
# Méthode pour informer tous les appareils que le jeu doit commencer.
@editable
GameStart:trigger_device = trigger_device{}
OnBegin<override>()<suspends>:void=
IntroHUDController.Enable()
# Attendre une mise à jour de simulation pour que tout s'initialise.
Sleep(0.0)
# Placer les joueurs en stase pour qu'ils ne puissent pas bouger.
ToggleStasisForAllPlayers(true)
# Afficher la série d'écrans de démarrage.
ShowSplashScreens()
# Masquer le titre et le menu du jeu à la toute dernière seconde.
# Cette expression defer s'exécute à la fin du bloc de code actuel,
# c'est-à-dire à la fin de cette fonction OnBegin, après GameStart.Trigger().
defer:
HideTitleAndGameMenu()
# Afficher le titre et le menu du jeu.
ShowTitleAndGameMenu()
# Libérer les joueurs de la stase pour qu'ils puissent à nouveau bouger.
ToggleStasisForAllPlayers(false)
# Remplacer les contrôleurs d'ATH par les ATH du jeu.
IntroHUDController.Disable()
GameHUDController.Enable()
# Informer tous les appareils qui écoutent que le jeu doit maintenant commencer.
GameStart.Trigger()
# Afficher l'écran de titre et l'option Lancer le jeu.
ShowTitleAndGameMenu()<suspends>:void=
# Ajouter la caméra de titre à tous les joueurs
TitleGameCamera.AddToAll()
# Afficher l'écran de titre
TitleScreen.Show()
# Attendre le nombre de secondes spécifié dans GameMenuDelay avant d'afficher l'option Lancer le jeu
Sleep(GameMenuDelay)
# Afficher le menu Lancer le jeu
StartGameDialog.Show()
# Attendre que le joueur appuie sur Lancer le jeu avant toute autre action
StartGameDialog.RespondingButtonEvent.Await()
# Masquer l'écran de titre et supprimer la caméra pour tous les joueurs.
HideTitleAndGameMenu():void=
TitleScreen.Hide()
TitleGameCamera.RemoveFromAll()
# Afficher la série d'écrans de démarrage.
ShowSplashScreens()<suspends>:void=
# Itérer tous les écrans de démarrage.
for (SplashScreen : SplashScreens):
# Afficher chaque écran de démarrage.
SplashScreen.Show()
# Attendre le temps nécessaire à l'affichage de l'écran de démarrage.
Sleep(SplashScreen.GetDisplayTime())
# Supprimer la caméra du jeu qui sert à afficher les écrans de démarrage.
SplashScreenGameCamera.Disable()
# Activer/Désactiver la stase des joueurs.
# Lorsque l'argument ShouldFreeze est activé (`true`), tous les joueurs sont placés en stase.
# Lorsque l'argument ShouldFreeze est désactivé (`false`), tous les joueurs quittent la stase.
ToggleStasisForAllPlayers(ShouldFreeze:logic):void=
for:
Player : GetPlayspace().GetPlayers()
Character := Player.GetFortCharacter[]
do:
if (ShouldFreeze?):
# Placer le joueur en stase et ne pas lui permettre de tourner ni d'effectuer une emote.
Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false})
else:
# Libérer le joueur de la stase.
Character.ReleaseFromStasis()