Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Lupi7 en Octubre 07, 2016, 11:04:21 AM

Título: Averiguar el vector perpendicular a un plano [Duda]
Publicado por: Lupi7 en Octubre 07, 2016, 11:04:21 AM
Buenos días a todos
 
Llevo un par de tardes teniendo problemas con un código y agradecería que alguien me arrojara algo de luz sobre esto.
 
Como se ve en la imagen tengo tres objetos: Suelo, Objeto móvil(rojo), objeto que sigue al rojo (verde)
 

 
Quiero que, cuando el objeto rojo colisione con el suelo, el objeto verde calcule el vector perpendicular al suelo y este se coloque perpendicular a dicho vector (paralelo siempre al suelo como se ve en la imagen)
 
Buscando información sobre esto me he encontrado con el código "Vector3.cross(vector1,vector2)", realiza el producto de dos vectores hallando el plano que los contiene y dando como resultado su perpendicular...
 
Pero lo que me lleva dos tardes sin avanzar es, como hago para que en el momento de la colisión obtenga esos dos vectores del polígono del suelo que el móvil toque?
 
Un saludo y enormes gracias de antemano.
Título: Averiguar el vector perpendicular a un plano [Duda]
Publicado por: juanma_teso en Octubre 07, 2016, 11:37:09 AM
Cuando colisiones con un objeto (OnCollisionEnter2D) puedes hacer un Raycast hacia abajo (esta dirección la consigues o usando el vector3.down o el -transform.up), haciendo estos consigues una referencia al plano a través de la estructura raycasthit, esta estructura tiene una variable llamada normal que te dará la dirección perpendicular del plano.
Título: Averiguar el vector perpendicular a un plano [Duda]
Publicado por: Lupi7 en Octubre 07, 2016, 10:32:47 PM
juanma_teso gracias por contestar y buscando sobre como hacer lo que decías, he encontrado algo que me ha sido de más fácil comprensión, y bueno pues ya que estoy la comparto.
 
Lo he solucionado con este código colocado en el objeto de color rojo que colisiona con el suelo:
 
    void OnCollisionEnter(Collision col)

    {

      normalvect = col.contacts[0].normal;

    }

 
Básicamente, cuando ocurra una colisión con unas características "col" busque el vector normal (perpendicular) del punto de contacto con el suelo y me lo en un vector3 llamado "normalvect".
 
Después he aplicado el vector al transform del objeto verde y todo sobre ruedas.