Jump to content
Sign in to follow this  
cazagavilan

Rotar el personaje hacia delante dependiendo de donde venga

Recommended Posts

Buenas!! Tengo un personaje el cual se mueve con esta función de manera aleatoria por el mapa:

public void MoveCar(float v, float h)
    {
        transform.Translate((new Vector3(v, 0, h)) * 10f * Time.deltaTime);
    }

v y h son valores que se generan aleatoriamente y constantemente entre -1 y 1.

La cuestión es que quiero que mi personaje mire en la dirección en la que va, había pensado guardar la posición anterior y restársela a la posición actual, en teoría con eso se crea un vector que apunta hacia atrás no? y después transformarlo de alguna manera para que apunte hacia adelante.

Hace tiempo encontré esta formula o una parecida para que el personaje apunte hacia donde va dependiendo de la dirección que venga.

Gracias de antemano!

Share this post


Link to post
Share on other sites

Buenas! Entiendo que esa función es llamada en Update, no? Tu proyecto es en 2D o 3D?

Si es 2D puedes hacer uso de Mathf.Atan2 para controlar hacia donde mira tu personaje y moverlo con un Lerp en vez de con Translate.

Share this post


Link to post
Share on other sites

No conozco el proyecto pero creo que, si ese personaje no es el player, la forma más óptima de hacerlo es mediante NavMeshAgent.

Puedes usar SetDestination y mirará automáticamente hacia donde tiene que ir.

Share this post


Link to post
Share on other sites

Necesito que el movimiento sea tal cual esta, aleatorio y con esos valores. Lo que necesito es que se rote hacia donde esta yendo. El problema es que el personaje no esta yendo a ningún punto concreto, simplemente se desplaza poco a poco por el terreno. Entonces creo que la solución seria saber de donde viene el personaje y eso transformarlo en lo opuesto para hacer que mire hacia allí. No se si me estoy explicando muy bien jaja. Saludos!

Share this post


Link to post
Share on other sites

 Quaternion.LookRotation(transform.forward); Funciona bastante bien pero de vez en cuando mira hacia otro punto o tarda mucho en girarse. Transform.forward apunta hacia donde esta apuntando el personaje o hacia donde se esta moviendo? Si apunta hacia donde mira el personaje no creo que sirva en este caso. 

Share this post


Link to post
Share on other sites

La dirección de movimiento la puedes tomar con la diferencia de la traslación.

Vector3 lastPos = transform.position;
transform.Translate(targetPosition * Time.deltaTime);
Vector3 dir = (transform.position - lastPos).normalized;

 

Share this post


Link to post
Share on other sites

Muchas gracias por las respuestas al final he usado navmesh, el proyecto es un pelín complejo y creo que por eso no obtenía los resultados que quería. Gracias!

Share this post


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

×
×
  • Create New...