Page 1 sur 1

Aligner un objet par rapport à une normale

Publié : 16 Juin 2018 19:04
par simonj
Hello,

Je tombe sur un problème de trigo qui est un peu complexe pour moi et qui, j'en suis sûr, est assez simple pour ceux qui connaissent bien leur trigonométrie.

J'ai 2 éléments. Un point de référence qui ne bouge jamais. Il tire un rayon sur son coté jusqu’à détecter une face de l'objet B. Grâce à ce lancer de rayon, je peux connaitre la normale de la face sur laquelle je viens de tomber. Ce que je voudrais, c'est trouver une rotation à appliquer à mon élément B pour que la normale repasse exactement par le point de référence.

En gros, je veux aligner l'objet B rapport au point de référence.

Voilà 2 images pour bien comprendre mon soucis.

Ma situation initiale :
Image
(Le rayon vert est le rayon tiré depuis mon point de référence. Le rayon bleu est le rayon crée grâce à la position du Hit et de la normale de la face)

Ma situation espérée :
Image

Quelqu'un aurais une idée ?

Attention : Bien sûr, sur cet exemple j'ai volontairement tourné l'objet B pour créer ce décalage. Mais je veux pouvoir trouver la formule pour aligner les éléments.

Re: Aligner un objet par rapport à une normale

Publié : 16 Juin 2018 21:22
par Alesk
Si ça peut t'aider, sache que tu peux directement assigner une valeur pour les vecteurs de direction du transform (forward,up,right) de ton gameobject.
Par exemple :

Code : Tout sélectionner

transform.up = new Vector3( 0.3f , 0.2f , 0.1f);
Tu as aussi la fonction lookat ( https://docs.unity3d.com/ScriptReferenc ... ookAt.html ) qui te permet de pointer dans une direction, et en spécifiant aussi le vecteur up.

Tu devrais t'en sortir avec ça ;)

Re: Aligner un objet par rapport à une normale

Publié : 02 Juil 2018 11:40
par TyxLePirate
Comme l'as dit mon VDD, la fonction Transform.LookAt est plutôt efficace !

J'utilise également une methode dans un de mes projets qui consiste à ecrire de la manière suivante :

Code : Tout sélectionner

transform.forward = -Wall.normal;
ou transform est ton objet B, et Wall l'objet de référence (de type RaycastHit)