Le modèle Verse Parkour vous explique comment créer un mode de jeu où les joueurs peuvent franchir stratégiquement des obstacles et des plateformes pour obtenir des batteries.
Dans ce mode de jeu, les joueurs doivent récupérer quatre batteries pour terminer le niveau. La durée du jeu est prolongée si les joueurs trouvent la batterie secrète. Une fois le temps écoulé, le joueur revient au début du jeu.
Ce modèle présente certaines fonctionnalités de langage élémentaires, comme :
-
Boucles for
-
Abonnements
-
Matrices
-
API d'appareil
Les concepts complexes, comme la concurrence, ne sont pas utilisés dans ce modèle.
Vue d'ensemble
Voici une vue d'ensemble des étapes à suivre pour recréer cette île de la meilleure manière :
-
Créez un nouveau projet et modifiez les paramètres de l'île pour configurer le jeu.
-
Construisez l'arène.
-
Configurez les appareils.
-
Ajoutez le script Verse.
Créer un nouveau projet et configurer le jeu
-
Ouvrez l'UEFN et créez un nouveau projet vide.
-
Sélectionnez l'appareil paramètres de l'île dans l'organiseur, puis recherchez Options utilisateur - Règles du jeu.
-
Modifiez les options utilisateur comme indiqué ci-dessous.
Option Valeur Explication Condition de victoire du jeu Score Le joueur qui obtient le score le plus élevé remporte la partie. Dégâts de la pioche Aucun Les pioches ne causent aucun dégât au décor. Commencer avec une pioche False Les joueurs ne commencent pas le jeu avec une pioche. Ramassage automatique des objets Oui Les joueurs ramassent automatiquement les objets qu'ils rencontrent. Permettre l'escalade/le sprint/la glissade/le coup d'épaule True Les joueurs peuvent effectuer ces mouvements dans leur environnement. Condition de victoire de la manche Score Les joueurs qui obtiennent le score le plus élevé remportent la manche. Première colonne du tableau des scores Score Le tableau des scores indique le score dans la première colonne.
Construction de l'arène
Cette carte utilise la Galerie Accessoires cyberville, qui se trouve sous Fortnite > Galeries > Accessoires.
Recréez cette carte avec des plateformes et des obstacles que les joueurs doivent franchir.
Configuration des appareils
Ce tutoriel utilise les appareils suivants :
-
1 x volume de dégâts
-
1 x chronomètre
-
1 x message d'ATH
-
1 x appareil Verse
Point d'apparition de joueur

Utilisez un point d'apparition de joueur pour faire apparaître les joueurs sur la carte. Au début de votre carte, placez un point d'apparition pour chaque joueur ; ils se trouvent dans Fortnite > Appareils > Point d'apparition de joueur.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Visible pendant le jeu | False | Cet appareil n'est pas visible en jeu. |
Appareil Fournisseur d'objets

Dans l'UEFN, lorsqu'on fait glisser un objet à usage unique depuis le tiroir à contenu, celui-ci est automatiquement placé dans un générateur d'objets. Faites glisser une batterie sur le mappage. Vous la trouverez à l'emplacement Fortnite > Items > Battery (Fortnite > Objets > Batterie).
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Temps avant l'apparition | 0,1 | Il détermine la durée avant l'apparition de l'objet. |
Délai de réapparition de l'objet | False | Les piles ne réapparaissent pas une fois ramassées. |
Base visible pendant le jeu | False | L'appareil n'est pas visible en jeu. |
Munitions bonus pour les armes | False | Les armes n'ont pas de munitions bonus. |
Ramasser en passant dessus | True | Les joueurs ramassent automatiquement cet objet. |
Échelle de l'objet | 2,0 | Détermine la taille des piles. |
Copiez-collez cet appareil quatre fois de plus et répartissez les copies à divers endroits de votre carte.
Appareil de fin de partie

Placez un appareil de fin de partie pour mettre fin à la partie lorsque l'appareil est activé.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Message de victoire personnalisé | Saisir du texte | Saisissez le texte que vous souhaitez afficher pour le joueur gagnant. |
Appareil Volume de dégâts

L'appareil Volume de dégâts définit une frontière au sein de laquelle les joueurs peuvent subir des dégâts. Placez cet appareil sous votre carte et ajustez la largeur, la profondeur et la hauteur de la zone pour couvrir la partie inférieure de votre arène et éliminer instantanément les joueurs qui tombent.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Dégât | 500 | Cet appareil inflige suffisamment de dégâts pour éliminer instantanément les joueurs qui tombent. |
Chronomètre

Placez un chronomètre à proximité de l'appareil de fin de partie. Le chronomètre se déclenche à rebours jusqu'à ce que le joueur soit éliminé et que le chronomètre doive se réinitiliser.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Durée | 30 | La durée du chronomètre est de 30 secondes. |
Lancer au démarrage du jeu | True | Le chronomètre démarre dès le début de la partie. |
S'applique à | Joueur | Lorsque le chronomètre démarre, il s'applique à un joueur spécifique. |
Réussite à la fin du décompte | False | La fin d'un chronomètre n'indique pas une réussite. |
Visible pendant le jeu | Masqué | L'appareil n'est pas visible en jeu. |
Texte du chronomètre en marche | Saisir du texte | Saisissez le texte que vous souhaitez afficher pour le chronomètre. |
Message d'ATH

Utilisez un appareil de message d'ATH pour afficher des messages engageants pour les joueurs.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
Durée d'affichage | 2,0 | Le message s'affiche pendant deux secondes avant de disparaître. |
Afficher au début de la manche | False | Ce message ne s'affiche pas au début de la manche, mais lorsque le joueur récupère des piles. |
Ajouter les scripts Verse
Ajoutez les scripts Verse suivants en commençant par référencer les appareils avec la fonction @editable.
Vous pouvez copier le code dans l'ordre où il est écrit. Des commentaires sont ajoutés dans le script pour plus de clarté.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation}
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# Voici un appareil créatif conçu avec Verse qui peut être placé dans un niveau
# Cet exemple de script est une version d'un jeu de parkour où l'objectif est de collecter 4 piles avant la fin du temps imparti.
#
# Pour démarrer :
# https://dev.epicgames.com/documentation/fr/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Référence de l'appareil Point d'apparition de joueur.
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
# Appareil de fin de partie en cas de victoire
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Chronomètre pour ce mode de jeu
@editable
TimerDevice : timer_device = timer_device{}
# Commentaires du message d'ATH destinés au joueur lorsqu'il collecte des piles
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Matrice des générateurs d'objets à disposition.
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Durée personnalisable à ajouter lorsque le joueur collecte les piles secrètes
@editable
SecretBatteryTimeReward : float = 10.0
# Déclaration d'un nombre entier représentant le nombre de piles que le joueur a collectées jusqu'à présent
var BatteriesCollected : int = 0
Le script ci-dessus montre comment utiliser @editable pour exposer les appareils du mode Créatif ainsi que les matrices et les floats dans l'UEFN. Pour que votre script puisse les appeler par la suite, vous devez au préalable définir les appareils dans Verse.
# Messages à afficher lorsque le joueur collecte des piles
BatteryCollectedMessage<localizes>(Amount:int) : message = "Vous avez récupéré {Amount} batterie"
BatteriesCollectedMessage<localizes>(Amount:int) : message = "Vous avez récupéré {Amount} batteries"
# Messages d'obtention des piles secrètes et message de fin
AllBatteriesCollectedMessage<localizes> : message = "Vous avez récupéré toutes les batteries !"
SecretBatteryCollectedMessage<localizes>: message = "Vous avez récupéré la batterie secrète ; vous obtenez un bonus de temps !"
Le script ci-dessus montre comment définir une fonction qui renvoie un message paramétré selon la quantité de piles récupérées. Il définit également les messages à afficher une fois toutes les piles, en comptant les piles secrètes, obtenues.
# S'exécute lorsque le script de cet appareil est lancé dans une partie en cours
OnBegin<override>()<suspends>:void=
# Il est possible d'afficher le journal comme suit pour déterminer ce que fait le script
Logger.Print("Parkour Race Script Started!")
# S'abonner à l'événement AgentSpawnedEvent.
# Lorsque le joueur apparaît, la fonction "HandleAgentSpawned" est appelée.
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# Idem pour le chronomètre. L'abonnement a lieu à l'expiration
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# Parcourir la matrice de batteryItemSpawners et, pour chaque générateur d'objets, s'abonner à l'événement ItemPickupEvent.
# Procéder de la même façon pour chaque générateur d'objets et ne pas enregistrer l'indicateur comme précédemment pour AgentSpawnedSubscription et TimerExpiredSubscription ci-dessus.
# Il n'est pas nécessaire d'enregistrer l'indicateur, mais sans lui, il est impossible d'annuler l'abonnement pour qu'il se déclenche à chaque fois qu'un objet est récupéré.
for (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Une autre façon d'exécuter la boucle for ci-dessus qui utilise un entier pour parcourir la matrice
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
La fonction OnBegin définit ce qui se passe lorsque le jeu commence lors de l'exécution de la boucle for sur l'événement des piles récupérées.
# Fonction appelée lorsque l'agent apparaît via le point d'apparition de joueur
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agent Spawned!")
# Remettre le chronomètre à zéro pour s'assurer que les joueurs qui réapparaissent disposent de tout le temps nécessaire
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
Lorsque le joueur apparaît, le code ci-dessus réinitialise le chronomètre et le redémarre.
# Fonction appelée lorsque des piles sont récupérées sur l'un des générateurs d'objets
HandleBatteryPickedUp(Agent:agent):void=
# Augmenter le nombre de piles collectées
set BatteriesCollected = BatteriesCollected + 1
# Voici comment transmettre le nombre de piles au journal. Utile à des fins de débogage
Logger.Print("Number of batteries picked up: {BatteriesCollected}")
# Vérifier si assez de piles ont été récupérées pour terminer la partie.
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# Vérifier si 4 piles (ou plus) ont été récupérées. Si c'est le cas, le joueur gagne, et la fonction EndGame est appelée.
spawn { EndGame(Agent) }
else:
# Ce code s'exécute si le nombre de batteries est inférieur à 4. Affichez un message d'ATH pour motiver le joueur
# Le message d'ATH est "battery" si une seule pile a été récupérée. Il devient "batteries" si plusieurs piles ont été récupérées.
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteriesCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Ensuite, récupérer le générateur d'objets suivant dans la matrice configurée précédemment
# Pour cela, l'indexer dans la matrice. Il se trouve à l'intérieur de l'instruction if pour s'assurer que NextBatterySpawner est référencé correctement.
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# À l'obtention du générateur d'objets suivant, appeler SpawnItem pour activer la prochaine pile à trouver
NextBatterySpawner.SpawnItem()
Le code ci-dessus gère une pile en train d'être récupérée. Si toutes les piles ont été trouvées, la méthode EndGame est appelée. Dans le cas contraire, des messages d'ATH s'affichent pour les joueurs et la prochaine pile apparaît.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Picked up secret battery")
# Obtenir le temps restant afin de pouvoir ajouter du temps supplémentaire
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Ajouter du temps supplémentaire au chronomètre, mais ne pas dépasser la durée initiale
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Le code ci-dessus ajoute du temps au chronomètre lorsque la pile secrète est trouvée. Il est défini pour ne pas dépasser le temps de démarrage de 30 secondes du chronomètre. Ce code affiche également un message à l'écran.
# Fonction appelée à l'expiration du chronomètre
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Timer Ended")
if (Agent := MaybeAgent?):
Agent
# Éliminer le joueur
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
alors:
FortCharacter.Damage(500.0)
Le code ci-dessus élimine le joueur une fois le temps écoulé. Le joueur réapparaît ensuite, et le chronomètre est réinitialisé dans la méthode HandleAgentSpawned.
# Fonction asynchrone qui gère la fin de la partie
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Attendre trois secondes avant de terminer la partie
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# S'exécute lorsque le script de cet appareil est arrêté ou que la partie prend fin
OnEnd<override>():void=
Logger.Print("Verse device stopped!")
Le code ci-dessus termine la partie. L'utilisation de Sleep(3.0) est un exemple d'utilisation d'une méthode asynchrone.
Configurer l'appareil Verse

Compilez votre script Verse, puis recherchez votre appareil dans le tiroir à contenu. Faites glisser l'appareil Verse dans une zone non visible de votre carte pour en personnaliser les paramètres.

Dans le panneau Détails de l'appareil, configurez les paramètres pour qu'ils correspondent à chaque appareil référencé, comme sur l'illustration ci-dessus.
Pour configurer cet appareil, réglez les options utilisateur comme suit :
Option | Valeur | Explication |
---|---|---|
PlayerSpawnDevice | Point d'apparition de joueur | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
EndGameVictoryDevice | Appareil de victoire en fin de partie | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
TimerDevice | Chronomètre | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
HUDMessageBattery | Appareil de Message d'ATH Piles | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
PlayerSpawnDevice | Point d'apparition de joueur | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
BatteryItemSpawners - 0 | Générateur de piles 1 | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
BatteryItemSpawners - 1 | Générateur de piles 2 | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
BatteryItemSpawners - 2 | Générateur de piles 3 | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
BatteryItemSpawners - 3 | Générateur de piles 4 | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
SecretBatteryItemSpawner | Générateur de piles - Secrète | Sélectionnez cette option dans la liste déroulante pour référencer les appareils. |
SecretBatteryTimeReward | 10,0 | Bonus de temps pour avoir trouvé la pile secrète. |
Sélectionnez Lancer la session pour tester le niveau que vous avez créé.