如何根据GameObject的位置获得角度?

时间:2016-05-19 16:37:13

标签: c# unity3d

我每次从传感器获取4个参数,O(原点),W(UP),V(FORWARD)和U(RIGHT),它们是Vector3元素,这个值我可以知道位置我的物体在太空中,但是我无法找到旋转来表示物体所有的移动物。

这是我到目前为止所得到的(每次使用入口向量的新值运行):

Vector3 vetO = new Vector3(entry[0], entry[4], entry[8]); //o
Vector3 vetU = new Vector3(entry[1], entry[5], entry[9]); //u
Vector3 vetV = new Vector3(entry[2], entry[6], entry[10]); //v
Vector3 vetW = new Vector3(entry[3], entry[7], entry[11]); //w

//Here i'm doing this to analize the rotation of a plan
vetW.x = 0;
vetU.z = 0;
vetV.y = 0;

float angleX = Vector3.Angle(vetW, Vector3.up);
float angleY = Vector3.Angle(vetV, Vector3.forward);
float angleZ = Vector3.Angle(vetU, Vector3.right);

//This is because unity bug, when angle is up to 180º
angleX = vetW.z < 0 ? -angleX : angleX;
angleY = vetV.x < 0 ? -angleY : angleY;
angleZ = vetU.y < 0 ? -angleZ : angleZ;

Vector3 angles  = new Vector3(angleX, angleY, angleZ);
transform.eulerAngles = angles;
transform.localPosition = vetO;

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想获得某个游戏对象的轮换,对吗?

为此,您可以使用YourGameObject.transform.rotation.eulerAngles以Vector3的形式为您提供轮播。如果您只想获得一个角度,可以使用YourGameObject.transform.rotation.eulerAngles.xYourGameObject.transform.rotation.eulerAngles.yYourGameObject.transform.rotation.eulerAngles.z