Les plateformes qui disparaissent lorsque vous atterrissez dessus sont un élément essentiel des modes de jeu de plateformes, comme les courses d'obstacles. Le joueur doit agir rapidement et prévoir où il va passer pour ne pas tomber.
En suivant ce tutoriel, vous apprendrez à générer une plateforme qui disparaît lorsque le joueur la touche et réapparaît un nombre aléatoire de secondes plus tard en utilisant Verse dans l'Unreal Editor pour Fortnite (UEFN). Cet exemple montre comment créer une zone où le joueur doit sauter de plateforme en plateforme pour éviter de tomber. Le script complet est inclus à la fin de ce guide pour référence.

Fonction du langage Verse utilisée
spawn: L'expressionspawnest utilisée pour appeler la fonction asynchrone qui fait réapparaître la plateforme après un nombre aléatoire de secondes.
API Verse utilisées
-
Sleep(): L'APISleep()est utilisée pour insérer les délais entre la disparition de la plateforme et sa réapparition au terme d'un délai aléatoire. -
GetRandomFloat(): L'APIGetRandomFloat()est utilisée pour calculer un temps aléatoire avant la réapparition de la plateforme. -
Propriétés modifiables : Quatre propriétés sont exposées dans l'UEFN - trois propriétés float pour contrôler les délais de disparition et de réapparition de la plateforme et la référence de la plateforme proprement dite.
-
Événements d'appareil : Vous utiliserez le
TriggeredEventdu déclencheur pour savoir lorsqu'un joueur atterrit sur la plateforme.
Configuration du niveau
Le point de départ du présent tutoriel est le modèle de démarrage Verse. Pour commencer, initialisez un nouveau projet à partir de l'exemple de fonctionnalités Appareil Verse.
Dans cet exemple, nous utiliserons les accessoires et appareils suivants.
-
1 x point d'apparition de joueur : cet appareil définit l'emplacement d'apparition du joueur au début du jeu.
-
4 x accessoires du mode Créatif : Verse vous permet d'appeler plusieurs comportements des accessoires du mode Créatif, comme
Hide()etShow(), pour basculer la visibilité de la plateforme et la collision. Ce tutoriel utilise l'Airborne Hoverplatform A comme plateforme avec laquelle le joueur interagit, mais vous pouvez en changer selon vos besoins. -
4 x déclencheurs : Ces déclencheurs vous permettront de savoir lorsqu'un joueur atterrit sur une plateforme.
Procédez comme suit pour configurer votre niveau :
-
Ajoutez une Airborne Hoverplatform A à votre scène. Placez-la au-dessus du sol pour que le joueur tombe s'il ne saute pas à temps de la plateforme qui disparaît. Dans l'organiseur, nommez la plateforme RecyclePlatform.
-
Ajoutez un déclencheur à votre scène et définissez-le comme enfant de votre RecyclePlatform. Placez-le sur la plateforme et redimensionnez-le afin qu'il la couvre entièrement. Dans l'organiseur, désactivez Visible pendant le jeu et définissez Nombre de déclenchements sur 1.
-
Placez le point d'apparition de joueur sur la plateforme. C'est là que le joueur va apparaître au début de la partie. Dans l'organiseur, désactivez l'option Visible pendant le jeu pour que le joueur ne puisse pas se tenir sur le point d'apparition après son apparition. Votre configuration complète doit ressembler à ceci :
Création de l'appareil
Cet exemple utilise un appareil créé avec Verse pour définir le comportement permettant de faire disparaître la plateforme lorsque le joueur atterrit dessus et de la faire réapparaître un nombre aléatoire de secondes plus tard. Suivez ces étapes pour créer cet appareil en utilisant Verse.
-
Créez un nouvel appareil Verse nommé disappear_on_touch_platform en utilisant l'explorateur Verse. Pour savoir comment créer un nouvel appareil dans Verse, consultez la page Créer votre propre appareil à l'aide de Verse.
-
Faites glisser l'appareil disappear_on_touch_platform du navigateur de contenu jusqu'au niveau.
Modifier les propriétés de l'appareil dans l'UEFN
Cette section montre comment exposer quatre propriétés d'appareil dans l'UEFN afin que vous puissiez les personnaliser dans l'éditeur :
-
Une référence d'appareil à l'objet du mode Créatif que vous avez placé dans le niveau.
-
Une constante float nommée
DisappearDelay, pour stocker le temps d'attente avant de cacher la plateforme, une fois que le joueur l'a touchée. -
Deux constantes
float, nomméesDelayMinetDelayMax, qui stockent les valeurs minimale et maximale de temps à attendre avant de faire réapparaître la plateforme. Ces deux valeurs définissent la plage autorisée lors de l'obtention d'un nombre aléatoire.
Suivez ces étapes pour exposer ces propriétés à partir de l'appareil disappear_on_touch_platform que vous avez créé dans la section précédente.
-
Ouvrez l'explorateur Verse et double-cliquez sur disappear_on_touch_platform.verse pour ouvrir le script dans Visual Studio Code.
-
À la définition de la classe
disappear_on_touch_platform, ajoutez les champs suivants :-
Un
floatmodifiable nomméDisappearDelay. Le temps à attendre avant de masquer la plateforme une fois que le joueur l'a touchée. Initialisez cette valeur à1.0, soit une seconde.# Le temps à attendre avant de masquer la plateforme une fois que le joueur l'a touchée. @editable DisappearDelay:float = 1.0 -
Un
floatmodifiable nomméDelayMin. * La durée minimale d'attente avant de faire réapparaître la plateforme. Initialisez-la à3.0, soit trois secondes.# La durée minimale d'attente avant de faire réapparaître la plateforme. @editable DelayMin:float = 3.0 -
Un
floatmodifiable nomméDelayMax. * La durée maximale d'attente avant de faire réapparaître la plateforme. Initialisez-la à3.0, soit quatre secondes.# La durée maximale d'attente avant de faire réapparaître la plateforme. @editable DelayMax:float = 4.0
Un
creative_propmodifiable nomméDisappearingPlatform. Il s'agit de la plateforme au sein du niveau qui disparaîtra et apparaîtra à intervalles réguliers. Vous allez l'instancier avec un archétypecreative_prop{}vide dans la mesure où votre code n'a pas encore de référence à cet objet dans le niveau. Vous assignerez ultérieurement cette référence à votre plateforme flottante.# Référence à la plateforme dans le niveau. @editable DisappearingPlatform:creative_prop = creative_prop{}-
Un
trigger_devicemodifiable nomméPlatformTrigger. L'événementTriggeredEventvous sera nécessaire pour savoir quand un joueur atterrit sur la plateforme.# La zone dans laquelle entre un joueur lorsqu'il atterrit sur la plateforme. @editable PlatformTrigger:trigger_device = trigger_device{}
-
-
Les champs de votre classe
disappear_on_touch_platformdevraient ressembler à ceci :# Un appareil du mode Créatif conçu par Verse qui peut être placé dans un niveau disappear_on_touch_platform := class(creative_device): # Le temps à attendre avant de masquer la plateforme une fois que le joueur l'a touchée. @editable DisappearDelay:float = 1.0 # La durée minimale d'attente avant de faire réapparaître la plateforme. @editable DelayMin:float = 3.0 # La durée maximale d'attente avant de faire réapparaître la plateforme. @editable DelayMax:float = 4.0 # Référence à la plateforme dans le niveau. @editable DisappearingPlatform:creative_prop = creative_prop{} # La zone dans laquelle entre un joueur lorsqu'il atterrit sur la plateforme. @editable PlatformTrigger:trigger_device = trigger_device{}L'attribut
@editableest utile pour exposer des valeurs commeToggleDelayà l'éditeur à partir de vos scripts. Il vous permet de personnaliser leurs valeurs dans l'UEFN sans avoir à recréer le code Verse chaque fois. Vous pouvez donc itérer rapidement et trouver les valeurs qui correspondent à votre expérience de jeu. -
Enregistrez le script dans Visual Studio Code.
-
Dans la barre d'outils de l'UEFN, cliquez sur Verse, puis Générer le code Verse pour mettre à jour l'appareil disappear_on_touch_platform du niveau.
-
Dans le panneau Organiseur de l'UEFN, sélectionnez l'appareil disappear_on_touch_platform pour ouvrir son panneau Détails.
-
- Dans le panneau Détails, sous Disappear on Touch Platform, définissez Platform sur RecyclePlatform (l'accessoire du mode Créatif que vous avez ajouté au niveau) en cliquant sur le sélecteur d'objets et en sélectionnant la plateforme dans le hublot.

-
Maintenant que votre appareil Verse référence un accessoire, sélectionnez les deux appareils et dupliquez-les plusieurs fois dans le niveau pour créer une série de plateformes entre lesquelles le joueur pourra sauter. Chaque nouvel appareil Verse que vous créez doit faire référence à sa propre plateforme.
Afficher et masquer la plateforme
Maintenant que vous avez configuré le niveau et les appareils, vous pouvez ajouter la fonctionnalité permettant d'afficher et de masquer la plateforme lorsqu'un joueur atterrit dessus. Procédez comme suit pour ajouter ce comportement à la classe disappear_on_touch_platform :
-
La classe
creative_propdispose de deux méthodes pour activer sa visibilité :Show()etHide(). De retour dans Visual Studio Code, àOnBegin(), appelezHide()puisShow()sur votreDisappearingPlatform.# S'exécute à l'activation de l'appareil dans une partie en cours. OnBegin<override>()<suspends>:void= # Rendez la plateforme invisible. DisappearingPlatform.Hide() # Rendez la plateforme visible. DisappearingPlatform.Show()Si vous exécutez ce code, la plateforme ne disparaît pas et ne réapparaît pas, car les appels
Hide()etShow()se produisent immédiatement l'un après l'autre.
Pour que la plateforme reste plus longtemps dans un état visible ou invisible, vous pouvez ajouter un délai lors de l'appel de Hide() ou Show() en utilisant Sleep(). La fonction Sleep() suspend l'exécution d'une routine, et vous spécifiez la durée (en secondes) de la suspension d'exécution en passant un argument float à la fonction. Appelez Sleep() avant chaque appel à Hide() et Show(), en transmettant le DisappearDelay défini précédemment.
# S'exécute à l'activation de l'appareil dans une partie en cours.
OnBegin<override>()<suspends>:void=
# Attendez le nombre de secondes indiqué par DisappearDelay.
Sleep(DisappearDelay)
# Rendez la plateforme invisible.
DisappearingPlatform.Hide()
# Attendez le nombre de secondes indiqué par DisappearDelay.
Sleep(DisappearDelay)
# Rendez la plateforme visible.
DisappearingPlatform.Show()
~~~
À présent, si vous exécutez ce code, la plateforme est invisible pendant une seconde (la durée définie par `DisappearDelay`) avant de devenir visible le reste du jeu.
La fonction `Sleep()` ne peut être appelée que dans un contexte **asynchrone**. La méthode `OnBegin()` est déjà un contexte asynchrone puisqu'elle dispose du spécificateur `suspends`. Aucune autre action n'est donc nécessaire de votre part. Pour en savoir plus sur le spécificateur `suspends`, consultez la page [Spécificateurs et attributs](specifiers-and-attributes-in-verse).
1. Varier le temps que met la plateforme à réapparaître peut rendre le jeu plus intéressant. Au lieu de fournir la même valeur à `Sleep()` à chaque fois, vous pouvez obtenir un nombre aléatoire de secondes avec la fonction `GetRandomFloat()` et passer sa valeur à `Sleep()`.
* En haut du fichier, ajoutez `using { /Verse.org/Random }` pour utiliser la fonction [`GetRandomFloat()`](https://dev.epicgames.com/documentation/fr-fr/uefn/verse-api/versedotorg/random/getrandomfloat).
~~~(verse)
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Consulter https://dev.epicgames.com/documentation/fr/uefn/create-your-own-device-in-verse pour apprendre à créer un appareil Verse.
# Un appareil du mode Créatif conçu par Verse qui peut être placé dans un niveau
disappear_on_touch_platform := class(creative_device):
~~~
* Utilisez la fonction `GetRandomFloat()` comme argument pour `Sleep()` lorsque vous décidez du temps à attendre avant de faire réapparaître la plateforme, et définissez la plage de secondes autorisée avec `DelayMin` et `DelayMax`.
~~~(verse)
# S'exécute à l'activation de l'appareil dans une partie en cours.
OnBegin<override>()<suspends>:void=
# Attendez le nombre de secondes indiqué par DisappearDelay.
Sleep(DisappearDelay)
# Rendez la plateforme invisible.
DisappearingPlatform.Hide()
# Attendez un nombre de secondes compris entre DelayMin et DelayMax.
Sleep(GetRandomFloat(DelayMin, DelayMax))
# Rendez la plateforme visible.
DisappearingPlatform.Show()
~~~
La plateforme va maintenant attendre `1.0` seconde avant de disparaître, puis elle réapparaîtra entre `3.0` et `4.0` secondes plus tard.
### Détection de l'atterrissage du joueur sur la plateforme
Pour pouvoir détecter quand le joueur atterrit sur la plateforme, vous pouvez vous [abonner](verse-glossary#subscribe) à l'[événement](verse-glossary#event) `TriggeredEvent` que la classe `trigger_device` expose. Le déclencheur envoie `TriggeredEvent` uniquement lorsque le joueur marche dessus. Comme vous avez réglé **Nombre de déclenchements** sur un, vous devrez appeler `Reset()` sur le déclencheur pour réinitialiser son état et lui permettre de renvoyer le `TriggeredEvent`.
Suivez ces étapes pour détecter le moment où le joueur touche la plateforme et utilisez le code que vous avez écrit à la section précédente pour faire disparaître et réapparaître la plateforme en réaction.
1. Le `TriggeredEvent` requiert une signature de fonction avec un `player` [optionnel](option-in-verse) comme paramètre et `void` comme type de retour. L'agent est facultatif dans cette fonction, car vous pouvez aussi activer les déclencheurs avec du code. Il n'est donc pas nécessaire de vérifier si c'est un joueur qui l'a activé. Ajoutez une nouvelle méthode appelée `OnPlayerTouch()` à la classe `disappear_on_touch_platform`.
~~~(verse)
OnPlayerTouch(ActivatingPlayer:?agent):void=
-
Dans une expression
ifdansOnPlayerTouch(), essayez d'obtenir le joueur à partir de l'optionActivatingPlayer. Si cet appel réussit, vous savez qu'un joueur a activé le déclencheur sans passer par le code.OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!") -
Dans
OnBegin(), abonnez-vous auPlatformTrigger.TriggeredEventen vous servant d'OnPlayerTouchcomme gestionnaire d'événements. Maintenant, chaque fois qu'un joueur atterrira sur la plateforme, leTriggeredEventsera activé, etOnPlayerTouch()fonctionnera.OnBegin<override>()<suspends>:void= # Abonnez-vous au TriggeredEvent du déclencheur de la plateforme pour savoir # qu'un joueur a atterri sur la plateforme. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) -
Lorsque la plateforme est cachée, les joueurs ne doivent pas pouvoir activer le déclencheur dans la mesure où ils doivent traverser la plateforme. Pour gérer cet aspect, dans
OnBegin(), ajoutez des appels àPlatformTrigger.Disable()etEnable()aprèsHide()etShow()respectivement. Il ne sera alors plus possible d'interagir avec votre déclencheur une fois votre plateforme masquée.OnBegin<override>()<suspends>:void= # Abonnez-vous au TriggeredEvent du déclencheur de la plateforme pour savoir # qu'un joueur a atterri sur la plateforme. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Attendez le nombre de secondes indiqué par DisappearDelay. Sleep(DisappearDelay) # Cachez la plateforme et désactivez le déclencheur. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Attendez un nombre de secondes compris entre DelayMin et DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Affichez la plateforme et activez le déclencheur. DisappearingPlatform.Show() PlatformTrigger.Enable()
Bien que vous deviez masquer la plateforme lorsqu'un joueur atterrit dessus, vous ne pouvez pas ajouter le code permettant de masquer et d'afficher la plateforme directement à la méthode OnPlayerTouch(). La fonction Sleep() ne peut être appelée que dans un contexte asynchrone, et vous ne pouvez pas ajouter le spécificateur suspends à OnPlayerTouch(), car TriggeredEvent n'autorise pas les fonctions asynchrones comme gestionnaire d'événement. À la place, vous pouvez utiliser spawn pour appeler une fonction asynchrone à partir d'OnPlayerTouch(). Procédez comme suit pour ajouter votre fonction asynchrone.
-
Ajoutez une méthode appelée
RecyclePlatform()à la classedisappear_on_touch_platform. Ajoutez le modificateur<suspends>pour permettre à ce code de fonctionner de manière asynchrone, puis déplacez le code d'affichage et de masquage de la plateforme et du déclencheur d'OnBeginau bloc de codeRecyclePlatform().# Cachez la plateforme et réinitialisez le déclencheur de la plateforme. Attendez ensuite quelques secondes et réactivez l'affichage de la plateforme. RecyclePlatform()<suspends> : void = # Attendez le nombre de secondes indiqué par DisappearDelay. Sleep(DisappearDelay) # Cachez la plateforme et désactivez le déclencheur. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Attendez un nombre de secondes compris entre DelayMin et DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Affichez la plateforme et activez le déclencheur. DisappearingPlatform.Show() PlatformTrigger.Enable() -
Dans
OnPlayerTouch(), appelezspawn{}surRecyclePlatform()pour exécuter le code de manière asynchrone. Votre fonctionRecyclePlatform()complète devrait ressembler à ceci :# S'exécute lorsqu'un joueur atterrit sur la plateforme. Appelle RecyclePlatform() pour masquer la plateforme # et réinitialiser l'état du déclencheur. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!") spawn{ RecyclePlatform() }Si vous exécutez ce code, la plateforme disparaîtra puis réapparaîtra lorsque le joueur atterrira pour la première fois sur la plateforme.
Asynchrone suggère qu'un morceau de code peut prendre un certain temps pour se terminer. Dans ce cas, par exemple, le recyclage de la plateforme prend quelques secondes à cause de tous les appels
Sleep(). Les fonctions asynchrones vous permettent d'effectuer des opérations sans bloquer l'exécution du code qui appelle la fonction asynchrone. Pour en savoir plus sur les contextes asynchrones et l'expressionspawn, consultez la rubrique Concurrence. -
Actuellement, l'événement
TriggeredEventn'est envoyé que la première fois que le joueur atterrit sur la plateforme. Pour rendre l'événement à nouveau déclenchable, vous pouvez appeler la réinitialisation du déclencheur. DansRecyclePlatform(), appelezReset()sur lePlatformTriggeraprès avoir appeléEnable().# Cachez la plateforme et réinitialisez le déclencheur de la plateforme. Attendez ensuite quelques secondes et réactivez l'affichage de la plateforme. RecyclePlatform()<suspends> : void = # Attendez le nombre de secondes indiqué par DisappearDelay. Sleep(DisappearDelay) # Cachez la plateforme et désactivez le déclencheur. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Attendez un nombre de secondes compris entre DelayMin et DelayMax. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Affichez la plateforme et activez le déclencheur. DisappearingPlatform.Show() PlatformTrigger.Enable() # Réinitialisez le nombre de fois où le déclencheur de la plateforme peut se déclencher. PlatformTrigger.Reset() -
Enregistrez le script et cliquez sur Verse, puis sur Générer le code Verse pour compiler le code.
-
Cliquez sur Lancer la session dans la barre d'outils de l'UEFN pour tester le niveau.
-
Lorsque vous testez votre niveau, chaque plateforme doit à présent disparaître lorsque vous atterrissez dessus et réapparaître un nombre aléatoire de secondes plus tard.

Script complet
Le code suivant est le script complet pour faire disparaître une plateforme lorsque le joueur atterrit dessus et la faire réapparaître après un nombre de secondes aléatoire.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Consulter https://dev.epicgames.com/documentation/fr/uefn/create-your-own-device-in-verse pour apprendre à créer un appareil Verse.
# Un appareil du mode Créatif conçu par Verse qui peut être placé dans un niveau
disappear_on_touch_platform := class(creative_device):
# Le temps à attendre avant de masquer la plateforme une fois que le joueur l'a touchée.
@editable
DisappearDelay:float = 1.0
# La durée minimale d'attente avant de faire réapparaître la plateforme.
@editable
DelayMin:float = 3.0
# La durée maximale d'attente avant de faire réapparaître la plateforme.
@editable
DelayMax:float = 4.0
# Référence à la plateforme dans le niveau.
@editable
DisappearingPlatform:creative_prop = creative_prop{}
# La zone dans laquelle entre un joueur lorsqu'il atterrit sur la plateforme.
@editable
PlatformTrigger:trigger_device = trigger_device{}
# S'exécute à l'activation de l'appareil dans une partie en cours.
OnBegin<override>()<suspends>:void=
# Abonnez-vous au TriggeredEvent du déclencheur de la plateforme pour savoir
# qu'un joueur a atterri sur la plateforme.
PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)
# S'exécute lorsqu'un joueur atterrit sur la plateforme. Appelle RecyclePlatform() pour masquer la plateforme
# et réinitialiser l'état du déclencheur.
OnPlayerTouch(ActivatingPlayer:?agent):void=
if:
Player := ActivatingPlayer?
then:
Print("A player touched a platform!")
spawn{ RecyclePlatform() }
# Cachez la plateforme et réinitialisez le déclencheur de la plateforme. Attendez ensuite quelques secondes et réactivez l'affichage de la plateforme.
RecyclePlatform()<suspends> : void =
# Attendez le nombre de secondes indiqué par DisappearDelay.
Sleep(DisappearDelay)
# Cachez la plateforme et désactivez le déclencheur.
DisappearingPlatform.Hide()
PlatformTrigger.Disable()
# Attendez un nombre de secondes compris entre DelayMin et DelayMax.
Sleep(GetRandomFloat(DelayMin, DelayMax))
# Affichez la plateforme et activez le déclencheur.
DisappearingPlatform.Show()
PlatformTrigger.Enable()
# Réinitialisez le nombre de fois où le déclencheur de la plateforme peut se déclencher.
PlatformTrigger.Reset()
À vous de jouer
À la fin de ce tutoriel, vous avez appris à créer un appareil utilisant Verse qui fait disparaître une plateforme lorsque le joueur atterrit dessus, et qui réapparaît un nombre aléatoire de secondes plus tard.
En vous servant de ce que vous venez d'apprendre, essayez d'effectuer les tâches suivantes :
-
Jouez avec les tailles et les positions des plateformes pour créer un défi intéressant.
-
Dans cet exemple, le joueur ne marque pas de points et rien ne se passe lorsqu'il tombe. Pouvez-vous imaginer comment vous mettriez en place un système de score et une condition de défaite ?