Unity旋转问题的总结

1.物体的直接旋转

transform.Rotate();这个函数是在当前状态下网某个方向旋转。并且这里可以设置为世界空间或者自身空间。

transform.rotation;这里可以通过直接定义一个quaternion变量然后赋值。

transform.forward=dir;这里直接设置方向

2.协同旋转

首先定义父亲物体以z轴为轴心旋转,子物体以自身空间的x轴旋转,并且两者的旋转角度数要一致,或者有某种函数关系。此时如果用rotate会因为要使用deltaTime导致相当麻烦,所以这里用欧拉角构建quaterni变量赋值rotation。但是如果用quaternion会发现父亲物体和子物体的旋转会发生错误,因为子物体除了自身旋转还要应用父亲物体的旋转,所以为子物体构建由rotation01之后,用父亲物体的rotation02取乘以rotation01,即rotation=rotation02*rotation01,结果rotation才是子物体正确的rotation。注意这里的乘以顺序不能颠倒,不同的去看一百遍线性代数。

3.旋转的角度值问题

获取的欧拉角的值实在0到360度之间。vector3获得的两个向量的有符号角度是-180到180。inspector显示的角度值如果代码或者场景控制物体旋转,显示的时0到180,但是手动控制可以是任何值。

4.获取一个四元数对应的方向

dir=rotation*vector3.forward;//这里会获取到某个旋转对应的forward方向,而不必在一个transform上获取

posted @ 2019-06-10 00:24  小辉歌  阅读(2897)  评论(0编辑  收藏  举报