Je tourne mon personnage de jeu pour regarder la cible en utilisant le code suivant:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion est la rotation actuelle du personnage quand une nouvelle cible est donnée.
lookQuaternion est la direction que le personnage doit regarder et il est défini comme ceci:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
tournantNormalizer est juste Time.deltaTime
incrémenté et turningSpeed
est une valeur statique donnée dans l'éditeur.
Le problème est que bien que le personnage tourne comme il se doit la plupart du temps, il a des problèmes lorsqu'il doit faire près de 180 degrés. Ensuite, il tremble parfois et reflète la rotation:
Dans cette image mal dessinée, le personnage (à droite) commence à se tourner vers le cercle à gauche. Au lieu de simplement tourner à gauche ou à droite, il commence cette "danse miroir":
- Il commence à tourner vers le nouveau parement
- Ensuite, il s'enclenche soudainement au même angle mais de l'autre côté et continue de tourner
Il effectue cette "mise en miroir" aussi longtemps qu'il regarde la cible. Est-ce une chose avec des quaternions, slerping / lerping ou autre chose?
EDIT1: Apparemment, le problème ne provient pas de la rotation elle-même. Le problème le plus probable est que le personnage se déplace vers le visage pendant qu'il tourne. En limitant l'angle, entre face et cible, lorsque le personnage est autorisé à se déplacer, il réduit et parfois élimine la rotation instable / miroir.
Bien sûr, cela soulève plus de questions, pourquoi le personnage ne peut-il pas bouger et tourner en même temps sans problèmes? Code utilisé pour le mouvement:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);