Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

ProjectOnPlane en 2d

Iniciado por JotaErre, Diciembre 23, 2017, 11:05:56 PM

Tema anterior - Siguiente tema
Muy buenas!
 
Estoy realizando el script de un personaje que se mueve en dos dimensiones. para esto aplico un "rigidbody.velocity" tanto para caminar como para saltar. Tengo problemas cuando el personaje recorre pendientes. Estoy tratando de aplicar "vector3.projectOnPlane" sin mucho exito.
 
¿Podría alguien orientarme un poco sobre como aplicar esta función correctamente?

Esa función te da la proyección de un vector sobre un plano, cuando le pasas la dirección en la que quieres moverte y la normal del plano te devuelve un vector con la proyección, igual con la imagen te queda un poco más claro:
 

 
Si te fijas la recta y el plano están inclinados con respecto del otro y al hacer la proyección obtienes un vector con la dirección de la recta pero sobre el plano, seguramente el problema sea que le pases mal algún parámetro a la función...

Diciembre 26, 2017, 05:51:20 AM #2 Ultima modificación: Diciembre 26, 2017, 05:56:51 AM por lightbug



   
      Tengo problemas cuando el personaje recorre pendientes. Estoy tratando de aplicar "vector3.projectOnPlane" sin mucho exito.
   

[/quote]
 
El método que yo uso para lo mismo es hacer un producto vectorial entre normal y forward, regla de mano izq (unity la usa así no se por que) de normal a forward te da un vector apuntando a la derecha proyectado como querés (luego le ponés el signo que quieras en la dirección). Me parece que recurrí a esto porque en su momento no encontré el projectOnPlane version 2D, no se ahora. La cosa es que casteando el suelo y teniendo su normal (por el método que quieras, ray,circle,capsule,etc) vas a poder obtener esa proyección que buscás.
 

Vector3 direccionMovimiento = Vector3.Cross(normalSuelo , Vector3.forward);
Debug.DrawRay(transform.position , direccionMovimiento * 2 , Color.red );

 
creo que ya está normalizado, de ultima normalizalo.

Muchas gracias a los dos por las respuestas.
 
No acababa de entender bien el funcionamiento de la función. Ya está solucionado.

Cita de: lightbug date=1514263880El método que yo uso para lo mismo es hacer un producto vectorial entre normal y forward, regla de mano izq (unity la usa así no se por que) de normal a forward te da un vector apuntando a la derecha proyectado como querés (luego le ponés el signo que quieras en la dirección). Me parece que recurrí a esto porque en su momento no encontré el projectOnPlane version 2D, no se ahora. La cosa es que casteando el suelo y teniendo su normal (por el método que quieras, ray,circle,capsule,etc) vas a poder obtener esa proyección que buscás.
   
   

Vector3 direccionMovimiento = Vector3.Cross(normalSuelo , Vector3.forward);
Debug.DrawRay(transform.position , direccionMovimiento * 2 , Color.red );

   
      creo que ya está normalizado, de ultima normalizalo.
   


Muy bueno

Etiquetas: