一、旋转方法
在 Unity 中为物体旋转提供了各种 API ,例如 RotateAround、Rotate、LookAt 等方法。但为了避免万向节死锁的问题,一般使用四元数来表示物体的旋转。
四元数的乘法可以看作对一个物体施加两次旋转,最终的旋转角度由这两次旋转的角度决定,旋转的顺序也会对旋转的结果产生影响(Q1*Q2≠Q2*Q1),因为四元数乘法的本质就是矩阵的乘法。
二、世界坐标&局部坐标
物体的坐标分为世界坐标(global)和局部坐标(local)
世界旋转坐标(如transform.rotation)表示物体相对于世界坐标系下的旋转角度
局部旋转坐标(如transform.localRotation)表示物体相对于父物体坐标系下的旋转角度,如果没有父物体,则局部旋转坐标与世界旋转坐标相同
另外,在 Inspector 面板中 Transform 的值也是物体的局部坐标。
三、世界坐标下的旋转
利用四元数旋转时要记住:旋转轴属于世界坐标系还是物体坐标系是由乘法的顺序决定的。
所以
绕本地轴进行旋转时:transform.rotation = transform.rotation * Quaternion;
绕世界轴进行旋转时:transform.rotation = Quaternion * transform.rotation;
在这里不需要知道任何本地旋转坐标或者对旋转轴进行坐标系之间的转换。
四、局部坐标下的旋转
在局部坐标下的旋转操作也是一样的,只有旋转顺序决定了旋转轴属于世界坐标系还是物体坐标系:
绕本地轴进行旋转:transform.localRot