ajouter le bon vecteur transform.rotation

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 : 345
Inscription : 10 Août 2016 03:03

ajouter le bon vecteur transform.rotation

Message par Kaloverian » 13 Mars 2020 15:44

bonjour,

La fonction Instantiate ne m'intéresse pas.

J'ai crée donc dynamiquement un objet:
GameObject Spawn2=new GameObject("Spawn2");

il est facile de lui attribuer une compsante Transform de position et de scale mais pas de rotation

Si j'écris:
Spawn2.transform.rotation=new Vector3(rot_x,rot_y,rot_z);
ça ne marchera pas alors que mon but est que dès que Spawn2 est généré(dynamiquement),sa composante de rotation ait pour vecteur(rot_x,rot_y,rot_z)

Je suis obligé de passer par
Spawn2.transform.rotation =Quaternion.Euler(x,y,z);
seulement
rot_x n'est pas égal à x
rot_y n'est pas égal à y
rot_z n'est pas égal à z

Je dois alors faire une petite conversion mais je ne sais pas comment(objet de cette question) afin d'obtenir après:
Spawn2.transform.rotation =Quaternion.Euler(x,y,z);
rot_x égal à x
rot_y égal à y
rot_z égal à z

merci de votre aide

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

Re: ajouter le bon vecteur transform.rotation

Message par Max » 13 Mars 2020 16:42

Bonjour,

Spawn2.transform.Rotate(rot_x,rot_y,rot_z); devrait correspondre à ce que tu cherches je pense.

PS: il aurait été sympa d'apporter une réponse dans ton sujet précédent: viewtopic.php?f=89&t=17547
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 : 345
Inscription : 10 Août 2016 03:03

Re: ajouter le bon vecteur transform.rotation

Message par Kaloverian » 13 Mars 2020 17:13

Non même avec:
Spawn2.transform.Rotate(rot_x,rot_y,rot_z);
le problème reste le même
pour :
rot_x=90
rot_y=120
rot_z=0
la composante de rotation du Spawn2 généré dynamiquement est hélas:(90,0,-120) et non(90,120,0)

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

Re: ajouter le bon vecteur transform.rotation

Message par Max » 13 Mars 2020 17:24

Kaloverian a écrit :
13 Mars 2020 17:13
la composante de rotation du Spawn2 généré dynamiquement est hélas:(90,0,-120) et non(90,120,0)
oui en valeur, mais en fait c'est pareil. Ton objet à bien l'attitude souhaité.
C'est le fait des conversions Euler->Quaternion (fonction Transform.Rotation()), puis Quarternion->Euler (restitution visu inspector).
D'ailleurs tu peux tester directement dans l'inpector, entrer les composants (90,0,-120) puis essayer en suite avec (90,120,0), tu verras ton objet aura la même rotation.
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 : 345
Inscription : 10 Août 2016 03:03

Re: ajouter le bon vecteur transform.rotation

Message par Kaloverian » 13 Mars 2020 17:39

alors je dois procéder à 2 conversions?
Euler-->Quaternion
Quaternion-->Euler

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

Re: ajouter le bon vecteur transform.rotation

Message par Max » 13 Mars 2020 17:49

Kaloverian a écrit :
13 Mars 2020 17:39
alors je dois procéder à 2 conversions?
Euler-->Quaternion
Quaternion-->Euler
Non. Ton souhait c'est d'entrer des valeurs d'angle pour positionner ton objet. Après que la visu dans l'inspector amène à des valeurs non identiques, est-ce un problème ? (du moment que ta rotation est visuellement bien ce qu'elle doit être).
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 : 345
Inscription : 10 Août 2016 03:03

Message par Kaloverian » 13 Mars 2020 18:05

pour mon projet un peu méticuleux de calculs,,c'est un problème.
Je pense pouvoir m'en sortir avec ce code trouvé:

Code : Tout sélectionner

public static Quaternion EulerToQuaternion(Vector3 euler)
{
    float xOver2 = euler.x * Mathf.Deg2Rad * 0.5f;
    float yOver2 = euler.y * Mathf.Deg2Rad * 0.5f;
    float zOver2 = euler.z * Mathf.Deg2Rad * 0.5f;

    float sinXOver2 = Mathf.Sin(xOver2);
    float cosXOver2 = Mathf.Cos(xOver2);
    float sinYOver2 = Mathf.Sin(yOver2);
    float cosYOver2 = Mathf.Cos(yOver2);
    float sinZOver2 = Mathf.Sin(zOver2);
    float cosZOver2 = Mathf.Cos(zOver2);

    Quaternion result;
    result.x = cosYOver2 * sinXOver2 * cosZOver2 + sinYOver2 * cosXOver2 * sinZOver2;
    result.y = sinYOver2 * cosXOver2 * cosZOver2 - cosYOver2 * sinXOver2 * sinZOver2;
    result.z = cosYOver2 * cosXOver2 * sinZOver2 - sinYOver2 * sinXOver2 * cosZOver2;
    result.w = cosYOver2 * cosXOver2 * cosZOver2 + sinYOver2 * sinXOver2 * sinZOver2;

    return result;
}
 ! Message de : boubouk50
Au bout de 90 messages, tu devrais être capable d'utiliser les balises tout de même...

Répondre

Revenir vers « (C#) CSharp »