[Résolu] Déterminer dans quel sens pointe un objet

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Istrella
Messages : 45
Inscription : 25 Juin 2013 23:08

[Résolu] Déterminer dans quel sens pointe un objet

Message par Istrella » 09 Oct 2014 15:37

Bonjour,

Comme beaucoup de monde je pense, j'ai toujours et encore du mal avec les quaternions et Cie.

Là en l’occurrence, je cherche à déterminer l'orientation approximative d'un objet enfant par rapport à l'objet parent.

Je pensais pouvoir simplement comparer les transform.rotation.x/y/z et en déduire ainsi si l'objet enfant "regarde" vers l'avant/l'arrière/haut/bas/gauche/droite de l'objet parent (par différence de tranches de 90°).
ça ne fonctionne pas :-D

Je me doute qu'il doit y avoir une méthode plus simple, mais mes essais précédents ayant été des échecs, je me suis rabattu sur la méthode empirique lourde à coder :-D

Je n'ai toujours pas eu ce déclic qui me permettrait enfin de comprendre les rotations dans unity.

Du coup si quelqu'un avait une petite piste pour résoudre mon problème, et aussi une explication de pourquoi ma méthode "lourde" ne fonctionne pas, histoire que je comprenne un peu mieux ce sac de noeud que sont les rotations/quaternions, ce serait très sympa ! :)

Merci de votre aide !
Dernière édition par Istrella le 10 Oct 2014 21:51, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Déterminer dans quel sens pointe un objet

Message par boubouk50 » 09 Oct 2014 16:15

Il doit surement avoir des fonctions définies pour cela sinon tu peux simplement récupérer le vecteur forward de l'enfant et du parent ce qui te permettra de déterminer quelles sont leurs positions l'un par rapport à l'autre, l'angle de rotation, la distance, etc...
Comme je ne sais pas quoi tu cherches exactement, je peux pas t'aider plus.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Istrella
Messages : 45
Inscription : 25 Juin 2013 23:08

Re: Déterminer dans quel sens pointe un objet

Message par Istrella » 09 Oct 2014 16:58

Merci de ta réponse.

En effet, la situation n'a peut-être pas été très bien expliquée.

Mon objet enfant est un propulseur qui donne une poussée dans la direction vers laquelle il pointe.

Avec plusieurs propulseurs attachés à mon objet parent (le véhicule lui-même), pour gérer correctement les commandes il faut que je connaisse l'orientation des différents propulseurs.
Si je veut aller vers le haut, j'utilise les propulseurs dirigés vers le bas, et seulement ceux-là.

Je cherche donc une méthode pour les trouver en fonction de leur orientation.

C'est très clair dans mon esprit mais je ne sais pas si je sais bien partager cette "clarté" par écrit :-D

Je vais déjà explorer la piste que tu m'a donnée (je ne sais d'ailleurs pas pourquoi je suis passée à coté).

Merci !

Istrella
Messages : 45
Inscription : 25 Juin 2013 23:08

Re: Déterminer dans quel sens pointe un objet

Message par Istrella » 09 Oct 2014 17:08

Bon bon bon, testée rapidement : la méthode ne fonctionne pas. :-(

Pour cause : le vecteur forward du propulseur reste identique quelque soit son orientation dans l'espace.
Il doit y avoir un problème de référentiel que je ne sais pas comment résoudre.

Je continue de chercher de mon coté, mais si vous avez une idée il ne faut pas hésiter ! ;-)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Déterminer dans quel sens pointe un objet

Message par boubouk50 » 09 Oct 2014 17:40

tu as bien utilisé transform.forward? c'est en World space normalement.

Du coup c'est quoi le rapport avec le parent? Tu travailles en coordonnées World ou bien Parent?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Istrella
Messages : 45
Inscription : 25 Juin 2013 23:08

Re: Déterminer dans quel sens pointe un objet

Message par Istrella » 09 Oct 2014 18:15

Imaginons que je veuille aller vers le haut : j'appuie sur Z et les propulseurs pointant vers le bas du véhicule (et seulement eux) donnent une poussée.
Pour ça, il faut donc que je connaisse leur orientation par rapport à l'objet parent (le véhicule dans son ensemble) et non par rapport au sol.

Autrement dit, si j'appuie sur Z alors que le véhicule est tête en bas, ça ne fera que l'écraser un peu plus vers le sol.

Dans cette configuration parent/enfant :

Véhicule
|-propulseur
|-propulseur

Je souhaite en fait déterminer le propulseur qui pointe vers le haut du véhicule, et celui qui pointe vers le bas du véhicule (et non pas vers le sol ou vers le ciel).

Je pense qu'il doit en effet y avoir un truc avec les coordonnées World/Local : ça doit être la source de mon problème.
Dans l'éditeur je suis en local, mais même si je passe en World je n'ai pas les mêmes résultats avec un transform.forward sur différents propulseurs pourtant orientés de manière semblables.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Déterminer dans quel sens pointe un objet

Message par artemisart » 09 Oct 2014 23:33

Une solution similaire à celle que j'ai donnée je sais plus où mais c'était pour de la 2d serait de calculer l'angle entre ton vecteur directeur et les vecteurs +z/-z/+x/-x/+y/-y, puis tu choisis le plus proche et comme ça tu peux trier tes propulseurs.

Istrella
Messages : 45
Inscription : 25 Juin 2013 23:08

Re: Déterminer dans quel sens pointe un objet

Message par Istrella » 10 Oct 2014 00:49

Pardon Artemisart, mais je n'ai pas tout compris :oops:

J'avais tenté le coup avec Vector3.Angle, mais ça me ne renvoyais qu'une différence globale rapport l'objet parent, qui ne me permettait pas de déduire l'orientation du propulseur.
Je pensais qu'une solution simple était possible, mais à priori ça ne l'est pas ^^

Tu pourrais illustrer ta solution avec une ou deux lignes de code si possible ?
Je ne te demande pas d'écrire le script ! juste assez pour comprendre le raisonnement.

Merci !

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Déterminer dans quel sens pointe un objet

Message par Alesk » 10 Oct 2014 03:13

Salut,

Déjà c'est pas dit que tu aies besoin du transform.forward, ça peut aussi être transform.up, en fonction de l'axe le long duquel tu veux te déplacer.

Ensuite, il serait judicieux de nous faire un petit dessin pour mieux expliquer ce que tu veux obtenir.

En attendant, pour connaitre le rapprochement ou l'éloignement entre deux vecteurs directeurs, il faut les normaliser (Vector3.Normalize()), puis faire un Dot product (Vector3.Dot()) sur ces deux vecteurs à comparer

Ce résultat te donnera une valeur allant de -1 à 1 :
-1 : les vecteurs vont dans des directions opposées
0 : les deux vecteurs sont perpendiculaires
1 : les deux vecteurs sont orientés dans la même directions

Et bien entendu toutes les valeurs intermédiaires indiquent l'angle entre les deux vecteurs, car cette valeur entre -1 et 1 est un cosinus

Avec ça tu devrais déjà avancer un peu mieux.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Déterminer dans quel sens pointe un objet

Message par boubouk50 » 10 Oct 2014 10:03

+1 Alesk. La colinéarité c'est la clé.
Aussi, je ne comprends pas pourquoi tu ne fais pas la manipulation en amont dans l'éditeur (Ex: changer les noms pour différencier les propulseurs). Tes propulseurs ne sont pas fixes par rapport au vaisseau?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripting »