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

情形

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

一个立方体上挂载脚本:

transform.Rotate(25, 45, 30);

效果十分正常:

改一下代码:

transform.Rotate(-25, 0, 0);
transform.Rotate(0, -45, 0);
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传入。

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

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

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

Unity使用transform.Rotate进行三维旋转角度出现偏差的更多相关文章

  1. 通过js获取元素css3的transform rotate旋转角度方法

    我们再试用jquery获取样式的时候是通过$('domName').css('transform'):的方式来获取元素的css样式,但是通过它获取到的css3的transform属性是以矩阵的方式呈现 ...

  2. 使用input range滑块,控制元素transform rotate旋转样式

    <!DOCTYPE html> <html> <head> </head> <body> <!-- 第一步:设置div旋转对象和inp ...

  3. transform:rotate()将元素进行不同角度的旋转

    通过设置transform:rotate()可以将元素进行不同角度的旋转: 下面是一些测试代码: <!DOCTYPE html> <html> <head> < ...

  4. transform:rotate在手机上显示有锯齿的解决方案大全

    先来个兼容性说明,洗洗脑: div{transform:rotate(7deg);-ms-transform:rotate(7deg); /* IE 9 */-moz-transform:rotate ...

  5. 拒绝IE8-,CSS3 transform rotate旋转动画效果(支持IE9+/chrome/firefox)

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...

  6. transform:rotate在手机上显示有锯齿的解决方案

    transform:rotate 属于简单好用的效果,但在手机上显示时,会有比较明显锯齿. 解决方案也很简单, 利用外层容器的overflow:hidden 加上图片margin:-1px 就可以解决 ...

  7. 用css3动画 @keyframes里设置transform:rotate(); 控制动画暂停和运动用属性:animation-play-state:paused暂停,在微信和safari里设置paused无效,在QQ里是正常的

    这几天遇到了两个很奇葩的问题,终于找到原因,趁还记得解决方法,赶紧记下来: 用css3动画 @keyframes里设置transform:rotate(); 控制动画暂停和运动可以用属性:animat ...

  8. css 调转180度:transform: rotate(180deg);

    css 调转180度:transform: rotate(180deg);

  9. transform:rotate/旋转

    <!DOCTYPE html> <html> <head> <style> div { width:100px; height:75px; backgr ...

随机推荐

  1. Photoshop CC 习惯设置

    安装后,一般设置: 1.编辑--首选项--常规 2.一般更改内容为: 性能 内存使用情况在50%-80%之间 暂存盘:除去C盘意外的其他盘 单位和标尺:以px为单位 其他根据喜好设定!

  2. 纯css实现箭头

    很久之前收集的,忘记出处了. 1.梯形: 当元素宽.高和边框的宽相近(等)时,改变某一边的颜色可以看到一个梯形: border: 10px solid #000; border-left-color: ...

  3. 性能工具-mem

    1.目前valgrind . memleak .free .top  .ps 中vsz Rss . buddy. slab 这些用的比较多,一般用于处理内存紧张问题

  4. wireguard使用

    1.编译与安装 sudo apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-con ...

  5. 从头学起Verilog(二):时序逻辑基础与回顾

    引言 时序逻辑对于数字电路设计十分重要,本文针对数字电路中的时序逻辑部分进行了系统的回顾. 存储器件 由于时序逻辑的输出不但受当前输入影响,还受之前的输入的影响,所以需要有存储单元对以前的输入进行存储 ...

  6. Ceph Bluestore首测

    Bluestore 作为 Ceph Jewel 版本推出的一个重大的更新,提供了一种之前没有的存储形式,一直以来ceph的存储方式一直是以filestore的方式存储的,也就是对象是以文件方式存储在o ...

  7. Linux内核剖析——操作系统的启动

    一.总体功能 1.从通电到BIOS跳转 1.1 CPU在通电后,先进入实模式,设置CS=0XFFFF,IP = 0X0000(指向BIOS) 1.2 BIOS进行执行系统监测,并且在地址=0处初始化中 ...

  8. python-网络安全编程第九天(json模块、zoomeye采集)

    前言 其实这篇应该是昨天必须完成的但是昨天emmmmm 学习进度有点慢 今天早上起来早点完成了这些的学习 昨天计划学习内容还差一道CTFemmm 不管了 先写一下今天的计划 开始锻炼身体去. pyth ...

  9. tp5 生成随机数

    控制器调用 public function GetRanStr(){ if (request()->isPost()) { //生成6位数随机数 return GetRandStr(6); } ...

  10. Python:安装Bio库不成功,出现ModuleNotFoundError: No module named 'Bio'

    Bio库的安装并不是pip install bio,而是biopython. ./anaconda3/bin/pip3 install biopython -i https://pypi.douban ...