Page 1 sur 1

[RESOLU]Effectuer une rotation de 180° quand mon gameObject est retourné ?

Publié : 22 Avr 2021 12:45
par ludoxe
Bonjour,
sûrement une question un peu stupide, mais bon, les maths c'est pas mon fort x)

Grosso modo, j'ai un perso qui a une arme qui vise automatiquement sa cible (pointe en direction de l'ennemi le plus proche).

J'ai un peu galéré pour ce script et je crois que sans internet j'y serais pas arrivé :

Code : Tout sélectionner

            
            var TargetVector = Target.transform.position - WeaponTest.transform.position;

            var angle = Mathf.Atan2(TargetVector.y, TargetVector.x) * Mathf.Rad2Deg;

            var myQuaternion = Quaternion.AngleAxis(angle, Vector3.forward);

            var SpriteGameObjectRotation = Quaternion.Euler(180, 0, 0);

            WeaponTest.transform.rotation = Quaternion.Slerp(WeaponTest.transform.rotation, myQuaternion, Time.deltaTime);
Le problème que je rencontre est le suivant :
Quand mon joueur (gameObject parent de WeaponTest) se retourne (rotation de 180° sur l'axe y), la rotation de mon arme qui est globale se retourne pas sur cet axe.

Je sais pas trop quoi faire pour régler le problème, je me doute qu'il faut multiplier mon quaternion myQuaternion par un autre quaternion. Dans ce style là

Code : Tout sélectionner

var QuaternionReverse = Quaternion.Euler(180, 0, 0);
Du coup ça fonctionne quand mon joueur est retourné, mais pas quand il est à l'endroit

Mais c'est là que je me doute que la réponse risque d'être simple mais, comment j'obtiens cet angle sur mon joueur (ou mon arme) qui devrait être de 180° ou de 0° et comment je le transforme en Quaternion ?


Merci d'avance

Re: Effectuer une rotation de 180° quand mon gameObject est retourné ?

Publié : 22 Avr 2021 13:49
par ludoxe
Non c'est bon je me suis auto résolu le problème :-D

Le code que j'ai écrit donc :

Code : Tout sélectionner

            var TargetVector = Target.transform.position - WeaponTest.transform.position;

            var angle = Mathf.Atan2(TargetVector.y, TargetVector.x) * Mathf.Rad2Deg;

            var myQuaternion = Quaternion.AngleAxis(angle, Vector3.forward);

            var QuaternionReverse = Quaternion.Euler(WeaponTest.transform.rotation.eulerAngles.y, 0, 0);

            WeaponTest.transform.rotation = Quaternion.Slerp(WeaponTest.transform.rotation, myQuaternion * QuaternionReverse, Time.deltaTime);
Voilà