我正在尝试根据传感器值(俯仰滚动偏航)旋转对象。我有以下脚本代码片段可旋转对象。
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之间的任何角度,都会发生这种情况。
答案 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
。