Avec les balises de jeu, vous pouvez trouver des acteurs marqués d'une balise spécifique pendant le déroulement du jeu. Les balises de jeu vous permettent de travailler avec plusieurs acteurs sans avoir à configurer les propriétés ni à attribuer des références dans l'Unreal Editor pour Fortnite (UEFN). Les balises de jeu sont créées dans le code Verse et attribuées dans UEFN.
L'utilisation de balises de jeu peut apporter des possibilités de jeu intéressantes, comme par exemple :
Modification de la configuration du niveau sans avoir à ajouter ou modifier les références de périphérique à votre périphérique créé par Verse.
Trouver tous les acteurs avec une balise spécifique et les faire fonctionner en fonction de leur type, comme allumer des lumières ou basculer des barrières.
Modification dynamique des acteurs actifs à mesure que le joueur progresse dans le jeu.
Activer les acteurs de façon conditionnelle pour une course d'obstacles basée sur une option de difficulté sélectionnée par le joueur.
Qu'est-ce qui peut être balisé ?
Actuellement, il est possible d'attribuer des balises de jeu aux éléments suivants :
Dans les sections suivantes, nous vous expliquons comment créer et utiliser les balises de jeu dans votre projet.
Création d'une balise de gameplay
Procédez comme suit pour créer une nouvelle balise de jeu à l'aide de Verse :
Ouvrez votre fichier Verse dans Visual Studio Code avec l'explorateur Verse.
En haut de votre fichier Verse, ajoutez le code suivant pour permettre de référencer la
tagclasse.Verseusing { /Verse.org/Simulation/Tags }Créez une nouvelle classe qui hérite de la classe
de balise. Le nom de votre classe détermine le nom de la balise. Dans cet exemple, la classe est nomméemytag, donc le nom de la balise de gameplay est mytag.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Votre fichier Verse devrait ressembler à ceci :
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Enregistrez votre fichier Verse et cliquez sur Générer les scripts Verse dans la barre d'outils UEFN pour compiler votre code afin de pouvoir utiliser votre nouvelle balise de jeu.
Les balises de jeu sont des étiquettes hiérarchiques. Ces balises peuvent avoir un nombre quelconque de niveaux hiérarchiques, séparés par le caractère _ dans le nom de la classe.
Lorsque le nom de la balise de gameplay apparaît dans l'éditeur, les caractères _ sont convertis en « . ».
Par exemple, une balise de gameplay avec trois niveaux aurait le nom de classe family_genus_species et apparaîtrait dans l'éditeur sous la forme « family.genus.species », "famille" étant l'identificateur le plus large dans la hiérarchie, et "espèce" étant le plus spécifique.
Notez que l'existence de "famille.genre.espèce" ne signifie pas implicitement que les balises de jeu "famille.genre" et "famille" existent également. Vous devez créer ces balises de jeu dans Verse avec les noms de classe family et family_genus pour créer les niveaux hiérarchiques.
Attribuer une balise de gameplay
Procédez comme suit pour attribuer une balise de jeu. Dans cet exemple, nous utilisons un appareil, mais la procédure est la même pour d'autres acteurs.
Dans UEFN, dans l' Organiseur, sélectionnez l'appareil que vous voulez étiqueter pour ouvrir son panneau Détails. Dans cet exemple, l'appareil est un appareil Button.
Dans le panneau Détails, cliquez sur Ajouter un nouveau composant et choisissez Marquage de balises Verse dans le menu déroulant.
Sélectionnez le composant VerseTagMarkup pour afficher ses paramètres dans le panneau Détails.
Sous Balises de jeu, modifiez la propriété Balises et ajoutez votre balise de jeu. Dans cet exemple, mytag est ajouté à l'appareil.
Vous pouvez ajouter plusieurs balises à un même acteur, de sorte que chaque acteur puisse appartenir à plusieurs groupes en même temps. Lorsqu'un acteur possède plusieurs balises, vous pouvez le rechercher par le biais de n'importe quelle balise qu'il s'est vu attribuer.
Par exemple, vous pouvez rechercher un acteur avec les balises mytag1 et mytag2 en appelant GetCreativeObjectsWithTag(mytag1{}) ou GetCreativeObjectsWithTag(mytag2{}).
Trouver des acteurs avec une balise de gameplay
Une fois que vous avez attribué des balises de jeu aux acteurs, vous pouvez retrouver ces derniers par balise de jeu pendant une partie en utilisant la fonction Verse GetCreativeObjectsWithTag(). Dans l'exemple suivant, l'appel de GetCreativeObjectsWithTag(mytag{}) renvoie TaggedDevices contenant tous les acteurs dont la balise mytag leur a été attribuée :
TaggedActors := GetCreativeObjectsWithTag(mytag{})L'appel de fonction GetCreativeObjectsWithTag() renvoie une matrice de tous les objets qui implémentent creative_object_interface. Par exemple, si vous avez attribué mytag à la fois à un appareil Bouton et à un appareil Lumière personnalisable dans le niveau, alors cet appel de fonction renverrait les deux appareils.
Vous pouvez convertir le résultat de GetCreativeObjectsWithTag() en une de ses classes d'implémentation (appelée conversion de type) en utilisant la syntaxe NewObjectReference := object_type_to_cast_to[ObjectReference], où object_type_to_cast_to correspond au type d'objet demandé. Par exemple, si vous voulez éteindre ou allumer un appareil de lumières personnalisables, vous devez convertir le résultat en customizable_light_device avant d'appeler la fonction TurnOff() ou TurnOn().
La conversion de type est une expression faillible, car la conversion de type échoue s'il est impossible de convertir l'appareil en ce type, notamment s'il s'agit d'un type d'appareil différent. Par exemple, vous ne pouvez pas convertir un appareil Bouton en une classe customizable_light_device, car un appareil Bouton et un appareil Lumière personnalisable ne sont pas du même type d'appareil.
Avec les expressions for, vous pouvez utiliser des expressions faillibles commefiltre et créer de nouvelles variables à utiliser dans le bloc de code for. Par exemple, vous pouvez ajouter la conversion de type de customizable_light_device à l'expression d'itération dans for. Puisque l'appareil sera converti en customizable_light_device, vous pourrez utiliser les fonctions spécifiques à cette classe, comme TurnOff() pour éteindre la lumière.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()Dans l'exemple suivant, nous vous expliquons comment vérifier de manière conditionnelle le type de l'acteur et comment appeler différentes fonctions selon le type. L'exemple vérifie si l'acteur étiqueté est un périphérique d'éclairage personnalisable qui peut appeler TurnOff() pour éteindre la lumière, ou si l'acteur est un périphérique de barrière qui peut appeler Disable() pour l'éteindre.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# If the tagged actor is a Customizable Light device, turn it off
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# If the tagged actor is a Barrier device, turn it off
BarrierDevice.Disable()Lorsque vous appelez GetCreativeObjectsWithTag(), la liste résultante ne répond à aucun classement spécifique que vous pouvez connaître ou affecter à l'avance. Dans les cas où vous ajoutez ou supprimez des acteurs entre plusieurs appels à GetCreativeObjectsWithTag() en utilisant la même balise, la liste résultante peut répondre à un classement différent pour chaque résultat d'appel.
Si votre jeu a besoin de gérer les acteurs dans un ordre spécifique, vous devez utiliser un tableau modifiable au lieu des balises de jeu, car le résultat de GetCreativeObjectsWithTag() est une liste non ordonnée d'acteurs.
Trouver une position par type avec les balises de jeu
Dans cet exemple, nous vous montrons comment filtrer les acteurs renvoyés par GetCreativeObjectsWithTag() par type et comment afficher leur position.
# find all actors with the all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Print the position of all creative_prop actors with the all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Print the position of all device actors with the all_tag
for (Device:AllCreativeObjects):
Explorer les didacticiels utilisant des balises de jeu
Dans les tutoriels suivants, nous vous expliquons comment utiliser les balises de jeu dans un jeu.