旋转-偏航角距

时间:2019-03-12 20:20:01

标签: unity3d rotation quaternions euler-angles

我正在尝试根据传感器值(俯仰滚动偏航)旋转对象。我有以下脚本代码片段可旋转对象。

if ((0<=ax&& ax<1.03f) && (0 <= az && az <1.03f))
        {
            if (x > calibrateX)
                x = x - calibrateX;
            else
                x = calibrateX - x;
            //x = Mathf.Abs(x);
            Debug.Log("0-90 Rotation on X @ " + x);

            Quaternion xangle = Quaternion.Euler(new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z));
            transform.rotation = Quaternion.Slerp(transform.rotation, xangle, Time.deltaTime * 2f);
        }
        //Pitch 90-180;
        else if ((0<= ax && ax<1.03f) && (-1.03f<=az && az< 0))
        {
            x = x+180;
            Debug.Log("90-180 Rotation on X @ " + x);
            Quaternion xangle = Quaternion.Euler(new Vector3(x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
            transform.rotation = Quaternion.Slerp(transform.rotation,xangle, Time.deltaTime*2f);
        }

该脚本适用于0 -90之间的角度。旋转平滑且符合预期。但是,当角度在90 -180之间时,对象旋转不平滑。在编辑器中,对象似乎在两点之间跳跃。例如,如果角度为110(xangle),则对象将在角度110和70之间跳跃。对于90-180之间的任何角度,都会发生这种情况。

我需要帮助以了解我在做什么错。感谢您的quan时间。

1 个答案:

答案 0 :(得分:0)

问题可能出在x = x + 180。 根据{{​​3}}:

  

返回围绕z轴旋转z度,围绕x轴旋转x度和围绕y轴旋转y度的旋转。

因此,如果x从0到90,然后从90到180,则目标旋转将是: 0至90,然后270至360。

为了更好地理解问题,您可以发布x的计算方式。

由于我现在x似乎只是角度间距,因此解决方案就是删除x = x + 180