2014-09-17 2 views
-1

장면에 두 개의 게임 개체가 있습니다.한 평면에서 두 변형 사이의 각도를 얻습니다.

저는 두 개의 오브젝트 사이의 각도를 얻기 위해 .angle 함수를 사용할 수 있다는 것을 알고 있습니다 만, 이것은 3d에서 하나의 각도입니다. 내가 원하는 것은 두 개의 다른 각도를 얻는 것입니다. 하나는 수직면에, 다른 하나는 수평면에 있습니다. 나는 하나 개의 게임 오브젝트, 최대 다른 20도 오른쪽 30도이 있다면

그래서, 내가 좀하고 싶습니다 :

수직 = 20; 가로 = 30;

감사합니다.

답변

0

필요한 것은 벡터를 수직 평면과 수평 평면에 각각 투영하고 각도를 계산하는 것입니다.

각도를 계산하기 위해 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; 
} 
관련 문제