在我的应用中,我需要了解设备的旋转情况。我正在尝试使用以下方法从陀螺仪中提取y轴值:
var y = Input.gyro.attitude.eulerAngles.y;
如果我只是简单地将其输出到屏幕上并转一圈(将手机笔直向上和向下……就像您在看屏幕一样),那么我将得到以下信息:

270、270、270、270等... 270t,290、310、20、40、60、80(很快) ... 90、90、90、90等...等等...

有什么办法可以解释这一数字的上涨吗?

最佳答案

云台锁

您所看到的是所谓的云台锁more info here。欧拉角越过360平面或更具体地说(三个轴中的两个被驱动为平行配置)时,就会发生这种情况,这就是人们使用四元数的原因。

四元数

您不应该直接拉动欧拉角。我建议这样的事情:

Quaternion q = Input.gyro.attitude.rotation;

通过使用四元数而不是欧拉角,我们将避免万向节锁定,从而避免出现360,0问题。

如果您只是想显示它们在y方向上所面对的角度,我可能会建议使用类似的方法,这会将y角度包装为0到180度:
/// <summary>
/// This method normalizes the y euler angle between 0 and 180. When the y euler
/// angle crosses the 180 degree threshold if then starts to count back down to zero
/// </summary>
/// <param name="q">Some Quaternion</param>
/// <returns>normalized Y euler angle</returns>
private float normalizedYAngle(Quaternion q)
{
    Vector3 eulers = q.eulerAngles;
    float yAngle = eulers.y;
    if(yAngle >= 180f)
    {
        //ex: 182 = 182 - 360 = -178
        yAngle -= 360;
    }
    return Mathf.Abs(yAngle);
}

关于unity3d - unity : Input.陀螺仪。姿态精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42895305/

10-12 03:55