Objectif
Faire en sorte que les pieds du personnage s’ajustent dynamiquement à la pente du sol en temps réel, en gérant séparément la hauteur (translation Z) et la rotation (alignement avec la normale du sol), pour un effet crédible même sur des surfaces inclinées ou irrégulières.
Fonctionnement général
Un système de trace (FootTrace_V2) calcule la position et la normale du sol sous chaque pied.
La translation (élévation des pieds et du pelvis) est appliquée via un IK Rig dans l’AnimGraph.
La rotation des pieds est gérée avec deux Transform (Modify) Bone, l’un par pied.
L’intensité d’application du système est contrôlée par une Curve Float (IKFoot) dans l’animation (Alpha blend).Détail du pipeline (étape par étape)
[Étape 1] Détection et mise à jour (Event Graph)
À chaque Tick, on récupère la valeur IKFoot via Get Curve Value.
Un FInterp est utilisé pour lisser cette valeur (éviter les sauts brusques).
On appelle deux fois la fonction FootTrace_V2, une par pied (Left & Right).
Elle retourne :
FootLocationZ
FootRotation (calculée à partir de la normale du sol convertie localement)
[Étape 2] Système de Trace (FootTrace_V2)
Un Sphere Trace By Channel part du socket du pied vers le bas (-Z).
La position d’impact (Impact Point) et la normale (Impact Normal) sont extraites via Break Hit Result.
On interpole la hauteur actuelle vers la hauteur détectée (smooth transition).
Le vecteur Impact Normal est utilisé pour calculer une Rotator, en tenant compte de l'orientation du pied (floor normal to local rotation).
Le résultat est renvoyé au Return Node.
[Étape 3] Application dans l’AnimGraph
Translation :
Les positions Left Foot IK, Right Foot IK, et Pelvis Goal sont passées dans un IK Rig node.
L'intensité est contrôlée par Foot Alpha et Smooth Foot L/R.
Rotation :
Deux Transform (Modify) Bone (un pour foot_l, un pour foot_r) reçoivent la rotation calculée.
L’intensité est blendée via la même courbe Foot Alpha.
Le tout est encadré par des conversions Component to Local / Local to Component pour rester cohérent dans l'espace de pose.Problèmes rencontrés
Difficulté à obtenir une rotation correcte : le sol retournait une normale world space qui ne s’alignait pas avec le pied.
Si les deux pieds touchaient des surfaces de hauteur différente, le pelvis avait un mouvement trop brutal.
Overlap / Interférence entre la translation des pieds et les slots d’animation des jambes (attaque, saut, etc.)
Solution implémentée
Séparation claire entre translation (IK Rig) et rotation (Transform Bone)
Conversion de la normale du sol en local space avant application à la rotation du pied.
Lissage du Foot Alpha et de toutes les valeurs critiques avec FInterpTo ou RInterpTo.
Utilisation d’une Curve Float intégrée dans les animations (ex : désactivation du Foot IK lors du saut).Tests et validation
Ajout d’un mode Debug où les traces sont visibles.
Comparaison du rendu avec et sans Foot Alpha actif.
Impression de valeurs Impact Point Z, Floor Normal, Rotation pour analyse manuelle.
Tests en boucle sur des pentes inclinées, marches d’escaliers, terrains irréguliers.
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 Pelvis Rotation léger selon la moyenne des angles de pente.
Limiter l’effet visuel sur certaines animations (ex : roll ou jump) avec un blend alpha plus agressif.
Ajouter un décalage latéral du pied selon l’inclinaison pour simuler un ajustement réel.
Prévoir une adaptation dynamique à la vitesse (ex : moins d’IK si personnage court vite).