transform.Rotate旋转顺序分析

本人在研究欧拉角旋转问题时,发现使用Transform.Rotate(Vector3 eulerAngles)方法,物体并不是按照z-x-y的顺序进行旋转。故采用了一些方法对其进行验证。详见下文:
一、Unity API Transform.Rotate方法官方说明
1、形式
形式1:public void Rotate(Vector3 eulerAngles);
形式2:public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
2、描述
Applies a rotation of eulerAngles.z degrees around the z axis, eulerAngles.x degrees around the x axis, and eulerAngles.y degrees around the y axis (in that order).
应用一个旋转,绕z轴eulerAngles.z度,绕x轴eulerAngles.x度,绕y轴eulerAngles.y度(这样的顺序)。
If relativeTo is not specified or set to Space.Self the rotation is applied around the transform's local axes. If relativeTo is set to Space.World the rotation is applied around the world x, y, z axes.
如果relativeTo未指定或设置为Space.Self,则旋转围绕变换的局部轴应用。 如果relativeTo设置为Space.World,则旋转围绕世界x,y,z轴应用。

二、验证过程
1、transform.Rotate(Vector3 eulerAngles)方法
在Unity中Sence窗口中放置5个飞机模型,每个模型Transform的Rotation的x、y、x初值设为0。并为每个模型添加一个控制模型旋转的脚本,在脚本的start()方法中使用transform.Rotate(Vector3 eulerAngles)方法使每个模型按不同的顺序依次进行旋转。每个模型的旋转顺序角度和结果见下图。

图1
为了方便观察,在脚本中使用Debug.DrawLine()画出了三条辅助线。其中,红线表示惯性坐标系X轴;蓝线表示惯性坐标系Z轴;绿线表示惯性坐标系Y轴。惯性坐标系的定义见文末。(每个模型惯性坐标系的相应轴指向是相同的,因为3D视角的问题,给人不一样的感觉。)
通过图1可以看出, 模型2模型5的旋转角度一样,可以推测,在Unity中使用transform.Rotate(Vector3 eulerAngles)方法对物体进行旋转时,其旋转顺序为 y-x-z。为了进一步确认结果,我们先停止游戏播放,拿其中一个模型做测试&#x
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值