내적을 이용하여 Acos으로 각도구하는 법도 있고 ( 0~ 180도)

Atan를 이용하여 각도를 구하는 법도 있지만 (-180 ~ 180도)

1
2
3
4
5
public static float GetAngle(Vector3 from, Vector3 to)
{
    Vector3 v = to - from;
    return Mathf.Atan2(v.y, v.x) * Mathf.Rad2Deg;
}
cs



0 ~ 360도로 구하기 위해서는 작업을 거쳐야하는데

Quaternion.FromToRotation 함수를 이용하면 0~360도 값을 바로 얻을 수 있다.

1
2
3
4
public static float CalculateAngle(Vector3 from, Vector3 to)
{    
    return Quaternion.FromToRotation(Vector3.up, to - from).eulerAngles.z;
}
cs

(https://gist.github.com/shiwano/0f236469cd2ce2f4f585)



다른 방법으로는 Vector3.SignedAngle이 있다. (-180 ~ 180도)

1
float angle = Vector3.SignedAngle(transform.up, endPos - startPos, -transform.forward);
cs

Axis는 transform.forward, -transform.forward로 시계, 반시계 방향을 정할 수 있다.

Posted by misty_
,