我在场景中有两个游戏对象。
我知道我可以使用.angle函数来获取两个对象之间的角度,但这是3d中的单个角度。我想要的是获得两个不同的角度,一个在垂直平面,一个在水平平面。
所以,如果我有一个游戏对象,另一个向上20度,向右30度,我想得到:
垂直= 20; 水平= 30;
感谢。
答案 0 :(得分: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;
}