Objectif
Permettre au joueur d’interagir avec différentes portes dans le niveau. Lorsqu’une porte est détectée, le personnage se positionne automatiquement devant elle et s'oriente vers la poignée avant de déclencher l’animation d’ouverture.
 Fonctionnement général

Le joueur appuie sur une touche d’interaction.

Un Sphere Trace détecte une porte (BP_DoorV1 ou BP_DoorV2).

Selon le type de porte, la bonne rotation (TargetRotation) et position (TargetLocation) sont calculées.

Le personnage est déplacé et orienté automatiquement via interpolation (Timeline + SetActorLocationAndRotation).

Une fois positionné, l’animation d’ouverture de la porte est lancée.
Détail du pipeline (étape par étape)

Input Action déclenche une fonction InteractTraceDoor.

Deux types de portes sont détectées via traces (BP_DoorV1, BP_DoorV2).

Selon la porte détectée :

KnobLocation, DoorNormal, et DoorDistance sont calculés.

Make Rot Character retourne la bonne TargetRotation.

Une fonction conditionnelle choisit quel résultat utiliser (porte 1 ou porte 2), ce qui évite les erreurs de logique croisées.

Une Timeline démarre pour interpoler vers la TargetLocation et TargetRotation.

L’animation d’ouverture de la porte est déclenchée après l’interpolation.
Problèmes rencontrés
Lorsqu’une porte 2 était ouverte après une porte 1, le personnage gardait l’ancienne rotation.

Des Add Rotator mélangeaient les valeurs même si une seule porte était détectée.

Deux branches de Set Rotation Porte A Ouvrir écrasaient mutuellement leur résultat.
Solution implémentée
Création d’une fonction unique avec des branches (GetRotationFromDoorTrace) qui détermine quelle porte est détectée et retourne une seule rotation propre.

Abandon de l’addition de rotations au profit d’un seul Set TargetRotation.

Vérification que tous les vecteurs (DoorNormal, KnobLocation) sont recalculés à chaque interaction.
Tests et validation

Ajout de Print String pour afficher la TargetRotation.Yaw à chaque interaction.

Ouverture d’une porte 1 → test d’une porte 2 dans différentes orientations.

Vérification que l’angle varie en fonction de la porte détectée, et non selon la porte ouverte précédemment.
 Visuels
Colle ici des captures d’écran :
Blueprint

Résultat dans le viewport

Console debug si pertinent
Notes personnelles ou améliorations futures

Ajouter une détection de blocage pour éviter que le joueur n’interagisse avec une porte derrière lui.

Optimiser les traces pour ne pas les faire en double.

Intégrer un Montage synchrone avec la porte plutôt qu’un trigger simple
Back to Top