필요한 것은 벡터를 수직 평면과 수평 평면에 각각 투영하고 각도를 계산하는 것입니다.
각도를 계산하기 위해 t1과 t2의 두 객체 사이의 방향과 t1.forward를 사용합니다. 이렇게하면 t1을 회전하면 각도가 변경되지만 t2를 회전하면 변경되지 않습니다.
이 예제에서 t1은 카메라와 같이 계산하려는 개체이고 t2는 목표와 같이 측정 한 위치입니다.
void Update()
{
Debug.Log(AngleInPlane(t1, t2.position, Vector3.up));
Debug.Log(AngleInPlane(t1, t2.position, Vector3.right));
}
public float AngleInPlane(Transform from, Vector3 to, Vector3 planeNormal)
{
Vector3 dir = to - from.position;
Vector3 p1 = Project(dir, planeNormal);
Vector3 p2 = Project(from.forward, planeNormal);
return Vector3.Angle(p1, p2);
}
public Vector3 Project(Vector3 v, Vector3 onto)
{
return v - (Vector3.Dot(v, onto)/Vector3.Dot(onto, onto)) * onto;
}