Objectif
Permet au personnage de franchir automatiquement un obstacle (muret, rebord) via un système unifié de vault ou de grimpage. Le tout est déclenché avec la même touche que le saut, et déclenche une animation avec adaptation dynamique des mains au rebord via IK.
Fonctionnement général
- Le joueur appuie sur la touche de saut (IA_Jump).
- Un système de trace détermine s’il y a un mur/obstacle en face.
- Si l’obstacle est assez haut, le personnage effectue une montée (climb).
- Si l’obstacle est bas, il effectue un vault.
- L’action joue un AnimMontage pendant lequel le personnage est déplacé vers le haut du rebord.
- Les mains du personnage s’adaptent dynamiquement au rebord détecté via IK piloté par une courbe d’animation.
Détail du pipeline (étape par étape)
[Étape 1] Détection de l'intention de grimpe
- Le joueur appuie sur IA_Jump.
- Si le personnage est au sol (IsFalling == false) → Saut normal.
- Sinon, la fonction ClimbVaultTrace est appelée pour analyser la situation.
[Étape 2] Analyse du mur via trace
- ClimbVaultTrace effectue plusieurs traces à différentes hauteurs.
- Retourne la distance, la normal du mur et la hauteur détectée.
- Détermine si le mur est compatible avec une montée (Climb) ou un vault.
[Étape 3] Déclenchement du bon type d’action
- Si la hauteur détectée dépasse un seuil : Grimpe (Climb).
- Sinon : Vault (franchissement court).
- Le système active une Timeline ou un Lerp qui déplace le personnage entre deux vecteurs (ClimbStartLocation → ClimbEndLocation).
[Étape 4] Désactivation du mouvement
- Le mouvement est temporairement désactivé (Set Movement Enable) pour ne pas perturber l'animation.
- Le personnage est "téléporté" progressivement via interpolation vers le sommet de l'obstacle.
[Étape 5] Jouer le montage et positionner les mains
- Le montage (Play Montage) joue une animation d’ascension ou de vault.
- Une courbe interne au montage pilote un blending FK → IK pour que les mains suivent dynamiquement les rebords détectés.
- Les valeurs comme Climb Hand L/R sont calculées à partir de l’offset détecté sur le rebord (image 4).
[Étape 6] Fin du déplacement
- Une fois l’animation terminée, la capsule du personnage est déplacée à destination (SetActorLocation final).
- Le mouvement est réactivé.
- Flags (IsVaulting, IsClimbing) sont remis à false.Problèmes rencontrés
- Difficulté à gérer certains rebords trop fins ou avec angles particuliers (le personnage se déplaçait mal).
- L’animation de vault pouvait interrompre ou écraser celle de climb.
- Risque de déplacement incohérent si le montage ne synchronise pas avec la position calculée.
Solution implémentée
- Ajout d’une logique conditionnelle claire entre Vault et Climb en fonction de la hauteur.
- Création de ClimbStartLocation, ClimbEndLocation, ClimbPeakZ pour découper le mouvement en segments maîtrisés.
- Correction de l’espace de blend IK grâce à des vecteurs calculés au moment du trace, évitant le “snapping” visuel des mains.
Tests et validation
- Tests avec obstacles de différentes tailles et formes.
- Debug visuel des traces et normales via Draw Debug.
- Impression en console des types d’action choisis (Vault, Climb, Jump).
- Vérification du positionnement des mains sur les bords en ralentissant l’animation dans l’éditeur.
Visuels
Colle ici des captures d’écran :
Blueprint
Résultat dans le viewport
Console debug si pertinent
Notes personnelles ou améliorations futures
- Ajouter un système de feedback visuel pour signaler les surfaces grimpables (par exemple un surlignement temporaire).
- Ajouter une tolérance angulaire pour les murs courbes ou inclinés.
- Améliorer l’anticipation de l'animation : par exemple faire une transition animée de préparation à la montée avant la montée elle-même.