Unity 3D 中的旋转
一、Unity 3D 中 Rotation
在Unity中,旋转通常可以用一个三维向量(x,y,z)表示。实际上这是欧拉角。三个分量分别是绕x轴、y轴和z轴的旋转角度。
要对一个GameObject进行旋转,可以直接通过如下代码:
transform.Rotate(xAngle, yAngle, zAngle);
那么有如下疑问:
- 上述的x轴、y轴、z轴指的是哪组基?是世界坐标系下的xyz轴,还是局部坐标系下的xyz轴?还是其他?
- 旋转的正方向如何?
- 旋转的顺序如何?
下面一一解答。
二、旋转轴
首先,回答第一个问题,到底旋转轴是哪个坐标系的基?分为如下三种情况。
1. 旋转轴:Inspector 中 Transform 的旋转数值
对于这一个情况,Unity Doc 中有明确的说明,
The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space.
即,Editor中Transform组件的旋转轴是父节点的模型空间坐标轴,如果没有父节点,则旋转轴是世界空间坐标轴。
上图显示了如果Transform有父节点,如图中的”Mesh”,则Position将是在其父节点(这里是”Cow”)的模型空间中的位置;如果没有父节点,Position就是在世界空间中的位置。同样,Transform中的Rotation和Scale也是相同的道理。
2. 旋转轴:在Script中使用Rotate函数,在Space.Self中旋转
public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);