Jump to content
Sign in to follow this  
nomoregames

ANSWERED gravedad aplicada en el eje local y

Recommended Posts

hola @nomoregames

creo que te estas liando..

el vector cross, el rosa, seria hacia el fondo...

osea en tu ejemplo el vector "newUp" (el rojo) (que es la "normal" del suelo) apunta hacia el eje "Y" del mundo...  

el vector forward (del player) (el azul) apunta hacia en eje "-X" del mundo...

pues esos dos vectores formarian un plano que seria el plano XY (un plano 2d) que es el "papel" donde has dibujado al muñeco (el circulo verde)

pues si haces el vector.cross de esos dos vectores obtienes un vector perpendicular (tieso) a ese plano...

osea que ese nuevo vector apuntaria hacia el fondo, hacia el eje "Z"

 

....luego utilizando ese vector que apunta hacia el fondo (eje Z) y usando el "newUp" (eje Y) formarias un plano que aqui no se ve...  pero para que te imagines cual es ese plano se podria decir que si ese plano fuese una guillotina, una cuchilla gigante, ese plano "partiria" por la mitad el circulo verde dejando a un lado del plano la parte derecha del circulo y al otro lado la parte izquierda....  entonces al hacer el vector.cross de esos dos vectores que forman ese plano se obtendria un vector que apuntaria hacia la "izquierda" del circulo verde....  osea un vector perpendicular al plano/guillotina que partio al circulo verde por la mitad 

...que casualmente es el mismo que el "forward" porque en este ejemplo el suelo es totalmente horizontal...

cuando el suelo coje otras inclinaciones es cuando cambia... ya que la normal del suelo (vector newUp) no apuntara recta hacia arriba... sino que estara torcida a derecha o izquierda y entonces el plano guillotina estara tambien inclinado y entonces el vector perpendicula a ese plano apuntara mas hacia arriba o hacia abajo dependido de como este inclinado el plano/guillotina...

y entonces luego con Quaternion.LookRotation(vectorHaciaAdelante, vectorHaciaArriba) lo que hacemos es que el personaje se coloque inclinado con la cabeza (up) hacia el vectorHaciaArriba, y mirando hacia el vectorHaciaAdelante

en mi ejemplo de codigo pone:

Quaternion.LookRotation(newForward, newUp)

el "newUp" lo conociamos desde el principio, es la normal del suelo...

y el newForward es el que hemos calculado... que sera como la liea azul de tu ejemplo pero apuntando inclinada mas hacia arriba o mas hacia abajo dependiendo de la inclinacion del suelo...

 

posdata: como te decia en el primer post... si es un juego 2d no hace falta que calcules el vector "left" (con el primer vector.cross) porque siempre apuntara hacia el fondo (eje Z) ya que el personaje solo se mueve en el plano XY

entonces en vez de calcular el vector "left" puedes poner que es "new vector3(0,0,1)"

Edited by Igor

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...