Aligner un objet par rapport à une normale

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Aligner un objet par rapport à une normale

Message par simonj » 16 Juin 2018 19:04

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.

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

Re: Aligner un objet par rapport à une normale

Message par Alesk » 16 Juin 2018 21:22

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 ;)

Avatar de l’utilisateur
TyxLePirate
Messages : 6
Inscription : 02 Juil 2018 10:41
Localisation : Bordeaux
Contact :

Re: Aligner un objet par rapport à une normale

Message par TyxLePirate » 02 Juil 2018 11:40

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)

Répondre

Revenir vers « Scripting »