Hey there,
I'm trying to work out the angle of one object in relation to another.
if(object A is at (5,0) and object B is at (10,0) then (assuming that 0 degrees is (0,1))
then object B is at 90 degrees to object A.
They way I was taught to do this was to work out the vector (C) between them A-B=C and then do atan2(c.y,c.x).
The way I was taught vector subtraction is as follows:
A-B =
B.x-A.x = C.x
B.y-A.y = C.Y
but it seems that in unity that:
A-B =
A.x-B.x = C.x
A.y-B.y = C.Y
Atan2 lists its arguments as Atan2(y,x), however if I use it as specified, then I seem to get incorrect results. if I do Atan2(x,y) and I assume that vector subtraction works differently to how I expect (A.x-B.x = C.x; A.y-B.y = C.Y), I get the correct results.
Hmm, maybe this will be clearer :P
public Transform enemy;
Vector2 me;
Vector2 enemyPos;
Vector2 bearingV;
float bearing;
// Use this for initialization
void Start () {
me = new Vector2(transform.position.x,
transform.position.z); // (10, 0)
enemyPos = new Vector2(enemy.transform.position.x,
enemy.transform.position.z); // (5,0)
bearingV = enemyPos - me;
float bearing = Tools.rad2Deg(Mathf.Atan2(bearingV.x,bearingV.y));
Debug.Log(bearing); //comes out at 90
}
So my questions are:
1) which way round does vector subtraction work in unity
2) are the arguments for atan2 in unity (y,x) or (x,y)
Thanks in advance for any clarification you can provide.
↧