Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Dans cette leçon, nous allons utiliser la logique d'item collectible créée précédemment pour déclencher une action dans le jeu.

En exemple, nous allons faire en sorte qu'une porte qui bloque le chemin du joueur soit supprimée de la scène uniquement après que tous les items de la carte aient été collectés.

C'est une structure de gameplay très courante : le joueur accomplit un objectif, et le jeu réagit en déverrouillant quelque chose. Cela peut être une porte, une plateforme, un ascenseur, un pont, une cinématique, un combat de boss ou tout autre événement de progression.

Dans cette leçon, vous apprendrez comment accéder et manipuler une Entity à partir de la logique d'une autre Entity. Dans ce cas, le joueur vérifiera la progression de collecte et supprimera ensuite la porte de la scène.

1. Création de la logique pour retirer la porte

Commençons par créer un nouveau Entity Template pour notre porte.

Configurez le Mesh qui sera utilisé comme sa représentation visuelle et ajoutez un composant de physique afin que la porte puisse bloquer le passage du joueur.

Puisque la porte doit empêcher le personnage de passer à travers, n'activez pas l'option Ghost dans le composant de physique.

Un corps physique Ghost peut détecter des collisions, mais il ne bloque pas physiquement le mouvement. Pour l'item collectible, c'était exactement ce que nous voulions. Mais pour la porte, nous voulons le contraire : le joueur ne doit pas pouvoir passer tant que la condition n'est pas remplie.

En appuyant sur la touche 3, vous pouvez visualiser l'aperçu des collisions de l'Entity. Cela est utile pour confirmer si la forme physique correspond correctement à la porte.

Cave vous offre différentes manières de configurer la forme physique. Vous pouvez utiliser le mesh de l'objet comme collision, importer un modèle optimisé uniquement pour la physique, ou même utiliser n'importe quel autre Mesh du projet comme forme de collision.

Choisissez l'option qui convient le mieux aux besoins et à la performance de votre jeu.

image.png

Le système que nous avons créé précédemment nous donne déjà exactement les informations dont nous avons besoin pour contrôler quand la porte doit être retirée.

Il calcule automatiquement le nombre total d'items collectables présents dans la scène, peu importe le nombre d'items qui existent sur la carte, et il suit également combien d'entre eux ont déjà été collectés par le joueur.

Cela rend la logique très flexible. Nous n'avons pas besoin de changer manuellement un nombre à chaque fois que nous ajoutons ou retirons des items du niveau. Le compteur continuera à fonctionner correctement, s'adaptant automatiquement à la quantité de collectibles disponibles dans la scène.

image.png

Avec ces deux informations disponibles — items collectés et total d'items — nous pouvons simplement comparer les deux valeurs.

Lorsque le nombre d'items collectés est égal au nombre total d'items sur la carte, cela signifie que le joueur a trouvé tous les collectibles et a rempli l'objectif requis pour ouvrir le chemin.

À partir de cette condition, nous exécuterons la logique responsable de la suppression de la porte de la scène, permettant au joueur d'avancer vers la prochaine zone du jeu.

Après avoir mis à jour TextCollect, nous vérifierons si tous les items de la carte ont déjà été collectés.

Pour cela, obtenez les propriétés Collected Item et Max Item et utilisez un nœud de comparaison pour vérifier si les deux valeurs sont égales.

Si la condition est vraie, cela signifie que le joueur a collecté chaque item disponible dans la scène et a rempli le besoin requis pour déverrouiller la progression.

image.png

À partir de cette vérification, nous pouvons exécuter la logique responsable de la suppression de la porte et permettant l'accès à la prochaine zone.

Pour ce faire, nous accéderons et manipulerons une Entity depuis la logique du joueur.

Tout d'abord, obtenez la Scene et utilisez le nœud Get Entities With Name, en passant le nom de l'Entity de la porte. Dans ce cas, le nom est Door.

Ce nœud retourne une liste des Entities trouvées avec ce nom.

Ensuite, utilisez un nœud Get pour récupérer l'élément à l'index 0, qui correspond à la première Entity trouvée avec ce nom.

Enfin, connectez cette Entity au nœud Kill.

Lorsque cette logique est exécutée, la porte sera retirée de la scène.

image.png

Il est important de comprendre ce qui se passe ici.

Le joueur n'est pas directement connecté à la porte en tant qu'Entity enfant ou parent. Au lieu de cela, le joueur obtient la scène actuelle, recherche une Entity nommée Door, la récupère de la liste de résultats, puis la retire.

Cela signifie que vous pouvez créer une logique où un objet affecte un autre objet dans la scène, ce qui est essentiel pour créer des interactions de gameplay.

Une chose à garder à l'esprit est que Get Entities With Name retourne une liste car il peut y avoir plus d'une Entity avec le même nom. Dans cet exemple, nous prenons l'index 0, ce qui signifie que nous utilisons le premier résultat trouvé. Dans ce cas simple, cela convient. Mais dans des projets plus vastes, il est bon de garder les noms d'Entity importants organisés, ou d'utiliser des balises et d'autres références selon la situation.

Cette logique peut être étendue de nombreuses manières différentes.

Dans cet exemple, nous avons utilisé la collecte de tous les items pour retirer une porte, mais le même principe peut être appliqué à presque n'importe quel événement dans votre jeu.

Au lieu de retirer une porte, vous pourriez :

  • déplacer une plateforme
  • activer un ascenseur
  • jouer une cinématique
  • activer un levier
  • commencer un combat de boss
  • déverrouiller une nouvelle zone
  • faire apparaître des ennemis
  • changer l'objectif du niveau

La chose la plus importante est de comprendre que vous avez maintenant les outils nécessaires pour créer des objectifs et des récompenses à l'aide de la logique visuelle de Cave.

Pour cela, un excellent exercice est d'essayer d'adapter ce système en quelque chose de différent de l'exemple montré dans cette leçon. Vous pouvez créer votre propre condition, votre propre récompense et explorer de nouvelles possibilités en utilisant tout ce que vous avez appris jusqu'à présent.

image.png