我正在开发一款游戏,其中某个部分需要使用陀螺仪的原始读数。我使用以下代码获取读数(我使用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轴也会出现同样的效果。
我已经成功地通过以下代码片段在iOS设备上重置陀螺仪读数来解决这个问题:Input.gyro.enabled = false;
接着是Input.gyro.enabled = true;
我使用这个方法来获取设备的绝对旋转准确读数,然后使用旋转变化来获取任何其他设备移动。但是在Android上这种方法不起作用。
有人遇到过这种情况吗?如果有,请问你是如何解决的,还是这是一个无法解决的错误?