使用 Unity3D 了解陀螺仪读数 API
Understanding gyrometer readings using the Unity3D API
我正在制作一款游戏,该游戏一度依赖于原始陀螺仪读数。我正在使用以下代码获取读数(我使用的是 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。
有人遇到过这个吗?如果是这样,您是如何绕过它的,或者是一个无法解决的错误?
这是因为您正在阅读四元数的转换。 Unity 中的欧拉角只是一种友好的方式来获得难以掌握的事物的 V3 表示。建议不要直接影响 eulerAngles 并作为参考使用。相反,将平面设备视为一次旋转,然后开始获取默认旋转和当前旋转之间的角度,并使用该值来定义您的操作。
您可以使用 Quaternion.Angle 来达到这个目的。
我正在制作一款游戏,该游戏一度依赖于原始陀螺仪读数。我正在使用以下代码获取读数(我使用的是 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。
有人遇到过这个吗?如果是这样,您是如何绕过它的,或者是一个无法解决的错误?
这是因为您正在阅读四元数的转换。 Unity 中的欧拉角只是一种友好的方式来获得难以掌握的事物的 V3 表示。建议不要直接影响 eulerAngles 并作为参考使用。相反,将平面设备视为一次旋转,然后开始获取默认旋转和当前旋转之间的角度,并使用该值来定义您的操作。
您可以使用 Quaternion.Angle 来达到这个目的。