Ángulo entre dos puntos

9

Tengo un personaje que camina hacia puntos aleatorios en mi habitación en Unity. El problema es que siempre mira en una dirección, quiero escribir en C # un código que obtenga la dirección que enfrenta el personaje actualmente y la posición del objetivo, luego calcula el ángulo entre ellos para convertir esa cantidad en el personaje. He probado la LookAtfunción, pero eso hace que el personaje camine en forma de arco hacia el objetivo, lo que se ve muy poco natural, ya que mira constantemente al objetivo.

Darren
fuente
44
No puedo escribir una respuesta adecuada ahora, pero necesitas trigonométrico básico. Coordenadas polares de Google y atan2.
jcora

Respuestas:

10

La función LookAt hace esto por usted. Es posible que lo esté usando incorrectamente o que algo esté mal con su dirección si tiene problemas con esto. También puedes probarlo de esta manera:

//find the vector pointing from our position to the target
dir = (Target.position - transform.position).normalized;

//create the rotation to look at the target
rotation = Quaternion.LookRotation(dir);

Ahora puede avanzar rápidamente hacia esa rotación, o puede hacerlo lentamente con el tiempo. (lentamente con el tiempo significa que todo este código debe entrar en la función de actualización)

//rotate over time
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * RotationSpeed);

//snap rotation
transform.rotation = rotation;

Para 2D, otro método alternativo sería Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))
MichaelHouse
fuente
void FixedUpdate () {// obtiene la dirección de dirección actual para alcanzar la posición de destino Vector3 walk = (this.mTargetPosition - this.transform.position) .normalized; // ignora 3d walk.y = 0.0f; caminar.Normalizar (); // moverse en la dirección deseada this.transform.LookAt (mTargetPosition); this.transform.Translate (-walk); }} esta es la forma en que configuré la función lookat tal como está, no puedo decir qué tiene de malo, excepto que supongo que tal vez no debería estar en fixedUpdate.
Darren
No estoy seguro. ¿Qué está haciendo? Cuando trabajo en dirección tengo líneas de depuración dibujadas por todo el lugar. Tengo líneas que muestran la dirección a la que se enfrentan los goblins, las líneas de aceleración y las líneas de velocidad. Ajústelos a diferentes colores para que sepa cuál es cuál, esto realmente ayudará con la depuración visual. Le permite saber cuál no se ve bien y luego puede analizarlo más a fondo.
MichaelHouse