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

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
ludoxe
Messages : 26
Inscription : 23 Mars 2014 19:17

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

Message par ludoxe » 22 Avr 2021 12:45

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
Dernière édition par ludoxe le 22 Avr 2021 13:50, édité 1 fois.

Avatar de l’utilisateur
ludoxe
Messages : 26
Inscription : 23 Mars 2014 19:17

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

Message par ludoxe » 22 Avr 2021 13:49

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à

Répondre

Revenir vers « Scripting »