使用Unity3D API了解陀螺仪读数

时间:2015-12-14 12:19:02

标签: c# android unity3d gyroscope

我正在构建一个依赖于原始陀螺仪读数的游戏。我使用以下代码获取读数(我正在使用C#):

void Start () {
    Input.gyrometer.enabled = true;
}

void Update() {
    _guiText = Input.gyrometer.attitude.eulerAngles.ToString();
}

我在OnGUI()方法中在屏幕上显示值。当我使用Unity时,我使用的是右手坐标系,我注意到陀螺仪的Y值对应于Unity中的X旋转。

问题是这些价值大幅上涨。例如,我可以将设备保持在X:90°并通过Y轴缓慢旋转;在某一点(大约270°标记)之后,X将突然翻转180°。但是,这意味着,如果我在设备处于Y的270°时启动应用程序,则X读数将完全无法使用。在Z轴上也会发生相同的效果。

我已经设法通过使用以下代码段重置陀螺仪读数来解决这个问题:Input.gyro.enabled = false;后跟Input.gyro.enabled = true;我用它来准确读取设备的绝对旋转然后我使用旋转变化来获得任何其他设备移动。但这并不适用于Android。

有没有人遇到过这个?如果是这样,你是如何绕过它或是一个无法解决的错误?

1 个答案:

答案 0 :(得分:1)

这是因为您正在阅读Quaternion的转换。 Unity中的欧拉角只是一种友好的方式来获得难以掌握的V3表示。建议不要直接影响eulerAngles以及使用它们作为参考。相反,将平面设备视为一个旋转,然后开始获取默认旋转和当前旋转之间的角度,并使用该值来定义您的操作。

您可以为此目的使用Quaternion.Angle。