Objectif
Déclencher des événements contextuels dans le niveau lorsque le joueur entre ou sort d’une Trigger Box, incluant des animations dans le Level Sequencer (ex: apparition d’un escalier), des modifications de variables, ou des activations de mécaniques de gameplay.
Fonctionnement général
Une Trigger Box (ou Trigger Volume) est placée dans le niveau.
- Lorsque le joueur ou un NPC entre ou sort de cette zone, un événement Begin Overlap ou End Overlap est déclenché.
Ces événements permettent de :
- Activer des séquences (cinématiques ou animations dans le level).
- Mettre à jour des tableaux d’objets (ex : nombre de NPC dans une zone).
- Déclencher un Custom Event ou une logique de Blueprint (Spawn, Audio, etc.).
- Figer l’état final d’une animation jouée dans un Level Sequence via Keep State.Utiliser des états de variables pour activer ou désactiver des conditions
- Exemple: Le personnage ne peut pas courir s'il a moins de 30% de vie
Détail du pipeline (étape par étape)
[Étape 1] Setup de la Trigger Box
La Trigger Box a les options Generate Overlap Events activées.
Les événements OnComponentBeginOverlap et OnComponentEndOverlap sont connectés dans le Blueprint.
[Étape 2] Détection de l’acteur
Les deux types d’acteurs sont castés :
Le personnage jouable (Cast to ThirdPersonCharacter)
Le NPC (Cast to BP_NPC)
Une fois l’acteur identifié, on met à jour une Array (ex : NPCInZone, PolinaInZone).
[Étape 3] Conditions
Si le nombre d’acteurs dans la zone tombe à 0 (Array Length == 0), un événement peut être déclenché (ex: apparition d’un escalier).
Ce déclencheur peut lancer :
Une animation
Un système d’activation de plateforme
Une séquence via le Level Sequencer
[Étape 4] Lancement du Level Sequence
Le Level Sequence est lancé depuis le Blueprint (via Play sur un LevelSequenceActor).
L’option "Keep State" est cochée pour figer l’état final de l’objet après lecture (important pour escaliers ou plateformes animées).
[Étape 5] Mise à jour et désactivation
Une fois la séquence jouée :
Le Trigger peut être désactivé (Set Collision Enabled: No Collision)
Ou une variable HasTriggered peut empêcher un second déclenchement.
On peut aussi forcer une animation à rester visible (Visibility, Set Transform, Disable Movement, etc.).Problèmes rencontrés
- Les objets animés revenaient à leur position d’origine après lecture du Level Sequence.
- BeginOverlap se déclenchait trop tôt (avant que le joueur soit complètement entré dans la zone).
- Multiples déclenchements involontaires dus à des NPC qui sortaient puis rentraient.Solution implémentée
- Utilisation du paramètre "Keep State" dans les propriétés de piste du Level Sequencer → l’objet garde sa dernière position/état.
- Vérification avec un tableau (Array Contains) pour filtrer les duplicatas.
- Ajout d’un Do Once ou booléen HasTriggered pour éviter les redondances.
- Delay ajouté après la fin de la séquence pour assurer la synchronisation avec les autres systèmes.Tests et validation
- Débogage avec des Print String dans les BeginOverlap / EndOverlap.
- Test de la Trigger avec différents acteurs (joueur, NPC).
- Vérification manuelle dans l’éditeur de l’état final des objets après lecture de la séquence.
- Check dans le viewport si la séquence garde la position (test avec et sans Keep State). Visuels
Colle ici des captures d’écran :
Blueprint
Résultat dans le viewport
Console debug si pertinent
Notes personnelles ou améliorations futures
- Créer un système centralisé de gestion d’événements environnementaux (ex : tout ce qui réagit à des triggers)
- Ajouter un DataTable de déclencheurs → plus flexible pour designer les niveaux
- Ajouter un effet de fondu, un son ou des particules pour rendre l’apparition d’un objet plus visible
- Ajouter un Timeline personnalisé au lieu du Sequencer si c’est une animation simple et locale