经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
Unity使用transform.Rotate进行三维旋转角度出现偏差
来源:cnblogs  作者:Napoleon0  时间:2020/11/10 10:50:05  对本文有异议

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

情形

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

一个立方体上挂载脚本:

  1. transform.Rotate(25, 45, 30);

效果十分正常:

改一下代码:

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

结果变成了:

原因

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

解决方法

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

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

transform.localEulerAngles也不可以单独设置某一个值,必须整个Vector3传入。

或者实在是想分开旋转,可以使用

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

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

原文链接:http://www.cnblogs.com/napoleon0/p/13951502.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号