J'essaye de faire un mouvement de personnage qui suit l'analogue.
Voilà le code
Code : Tout sélectionner
if (horizontal != 0 || vertical != 0) { // Si je bouge avec analogue gauche
// Je tourne le pivot avec analogue droit
pivotHorizontal.transform.rotation *= Quaternion.Euler (0, lookHorizontal * speedRotation, 0);
// C'est le controller perso, il tourne en même temps que le pivot
body.transform.rotation = pivotHorizontal.transform.rotation;
float angle = Mathf.Atan2 (horizontal, vertical) * Mathf.Rad2Deg;
angleSoldier = Mathf.Lerp (angleSoldier, angle, 0.5f);
// C'est le perso
soldier.transform.localRotation = Quaternion.Euler(0,angleSoldier,0);
//Quaternion.Euler(0, angle,0);
}else { // Si je bouge pas, c'est juste le pivot qui tourne
pivotHorizontal.transform.rotation *= Quaternion.Euler (0, lookHorizontal * speedRotation, 0);
}
Mon problème est que ça :
float angle = Mathf.Atan2 (horizontal, vertical) * Mathf.Rad2Deg;
return soit 0,90,180 ou -90
Du coup par exemple je pousse mon analogue gauche vers le bas, le perso va bien se diriger vers le bas.
Maintenant je pousse mon analogue gauche vers le bas et la gauche donc dans son coin inférieur gauche.
angle va alors passer de 180 à -135 donc le perso "rotationne" vers la position mais en allant d'un coup de 180 à -180 puis 135.
Donc imaginer le bug de rotation.
Ce problème je l'ai seulement parce que je fait un Mathf.Lerp pour que la rotation soit pas nette mais plutôt réaliste. Et seulement avec l'analogue dans ce cas de figure dans tous les autre cas j'ai aucun souci.
Je vais difficilement réussir à expliquer mieux mon problème mais si par hasard quelqu'un vois ce que je veux dire et à une solution je suis preneur.
En attendant je souhaite une bonne journée à tous mes lecteurs
Les balises code SVP
Lire la Netiquette. Merci.