prendre les composantes de rotation locale

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

prendre les composantes de rotation locale

Message par Kaloverian » 20 Déc 2021 17:20

bonjour,

Je parente un objet obj à un empty.
A cet objet,je lui assigne des composantes locales de rotation comme ceci:

Code : Tout sélectionner

obj.transorm.parent=empty.transform;
obj.transform.localRotation=Quaternion.Euler(a,b,c);
Comment obtenir à nouveau en degrés les composantes de localRotation(ou les composantes locales de rotation) de l'objet si l'empty ou l'objet a tourné?
A mon fort avis,ces instructions ne répondent pas à ma demande
obj.GetComponenet<Transform>().lrotation; //composantes globales de rotation en radians
obj.GetComponenet<Transform>().localRotation; //peut-être compsantes locales de rotation mais ne renvoie pas en degrés
obj.GetComponenet<Transform>().eulerAngles;; //compsantes globales de rotation en degrés

merci de votre aide

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: prendre les composantes de rotation locale

Message par Max » 20 Déc 2021 21:23

Bonsoir,

transform.rotation et transform.localRotation sont des quaternions, donc tu auras leurs composants (x-y-z-w).
Si tu souhaites avoir les valeurs de rotations en degré, il faut passer par :
transform.rotation.eulerAngles et transform.localRotation.eulerAngles.
La doc est ton amie pour ce genre de chose, et détaille plutôt bien ces concepts.
Sinon, tu as ce genre de lien qui peut aider à mieux comprendre: https://gamedevbeginner.com/how-to-rota ... ers-guide/
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: prendre les composantes de rotation locale

Message par Kaloverian » 20 Déc 2021 22:51

1)pourquoi l'instruction:

Code : Tout sélectionner

   if(Input.GetKeyDown(KeyCode.I))
         {
            obj.transform.localRotation=Quaternion.Euler(0,angle,0);   //ne tourne qu'une seule fois
            
        }    
ne fait tourner qu'une seule fois seule fois l'objet malgré plusieurs appui de la touche I ?

2)
a)J'ai l'impression qu'après:
obj.transform.localRotation=
on ne peut mettre qu'un Quaternion (Quaternion.Identity , Quaternion.Euler(a,b,c))
Est-ce juste?
b)pour effectuer une rotation locale de obj parenté à empty déjà tourné globalement(par exemple)donc par rapport à laxe des ordonnées de l'empty et d'angle alpha
c'est bien cette instruction à uitliser:

Code : Tout sélectionner

obj.transform.parent=empty.transfom;
obj.transform.localRotation= Quaternion.Euler(0,alpha,0);   
Est-ce juste?
Si non,quelle est lla bonne instruction?

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: prendre les composantes de rotation locale

Message par Max » 21 Déc 2021 01:03

j'ai parfois le sentiment que tu ne lis pas les réponses qui te sont faire.
Et que tu ne t’appuies pas sur la doc, pourtant plutôt bien faite.

1) normal, tu affectes une valeur angulaire à ton objet, donc chaque appui lui affectera toujours la
même valeur.
2) comme expliqué dans mon précédent message (avec liens vers la doc), oui localRotation et rotation sont des quaternions.

Pour le reste, regarde du coté de la méthode Rotate de la classe Transform, qui devrait répondre
à tes attentes.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »