Unity使用transform.Rotate进行三维旋转角度出现误差

Unity使用transform.Rotate进行三维旋转角度出现误差

情形

最开始遇到该问题的状况比较复杂,另写了一个例子。情形以下:c#

一个立方体上挂载脚本:code

transform.Rotate(25, 45, 30);

效果十分正常:orm

改一下代码:blog

transform.Rotate(-25, 0, 0);
transform.Rotate(0, -45, 0);
transform.Rotate(0, 0, -30);

结果变成了:it

缘由

transform.Rotate(x, y, z)方法不是在物体的三个旋转角度上分别加x, y, z,而是根据咱们给出的三个角度,寻找一个合适的轴,旋转相应的角度。因此当分三次进行旋转时,第三次旋转会影响前两次已经转出来的角度。(大概就是转一根歪着的笔就不是沿着中轴转了)form

解决方法

别分开旋转,除非角度是多少无所谓。若是想在物体的三个旋转角度上加减指定数值,能够使用class

transform.localEulerAngles = new Vector3(transform.localEulerAngles.x + dx, transform.localEulerAngles.y + dy, transform.localEulerAngles + dz);transform

transform.localEulerAngles也不能够单独设置某一个值,必须整个Vector3传入。方法

或者实在是想分开旋转,能够使用im

transform.Rotate(-25, 0, 0, Space.World);
transform.Rotate(0, -45, 0, Space.World);
transform.Rotate(0, 0, -30, Space.Self);

我试了试,是能够转出来(-25, -45, -30)的角度的。若是想保证一个物体的某一方向转动和其余的分开,(好比人转身不受身体歪成啥样影响)也是一种可行的方法。

相关文章
相关标签/搜索