1、关于万向节死锁
2、【Unity技巧】四元数(Quaternion)和旋转、
一、Unity中的Rotation
在unity中,旋转的表示的常用方法之一,是一个三维向量(x、y、z):
图1、Unity中的旋转
实际上这是欧拉角。这三个分量分别是绕x轴、y轴、z轴旋转的角度。
要对一个object进行旋转,还可以通过代码:
transform.Rotate(x, y, z);
这里,如果看过《坐标系》一文,就会产生以下两个疑问:
1)x轴、y轴、z轴指的是那组基?是世界坐标系下的xyz轴,还是本地坐标系下的xyz轴?
2)旋转的正方向是如何确定的?
下面分别讨论。
二、旋转轴:静态欧拉角和动态欧拉角首先回答第一个问题:到底哪个是旋转轴。这又要分为 3种情况。
1、旋转轴:Editor 中 Transform的旋转数值
对这个情况来说,其显示的旋转轴既不是世界坐标系的坐标轴,也不失本地坐标系的坐标轴。Editor中transform的旋转轴是父节点的坐标轴。这点在editor中看的非常明显,因此不再赘述。
2、旋转轴:在script中使用 rotate 函数,在 Space.Self 中旋转
Rotate 函数有两个入参:
public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
第二个入参的取值有两种:Space.Self 或者 Space.World。我们先看默认的 Self 的情况。使用下面的一段简单的代码来进行测试:
public class TestRotate : MonoBehaviour { public Space rotateSpace; // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.R)) transform.Rotate(new Vector3(0, 10, 0), rotateSpace); } }场景中进行测试的是一个圆柱体,其父节点的旋转为(30,30,0),圆柱体初始的旋转为(30,0,0),每次按下R键,就会在Space.Self 下绕 Y轴旋转10度,则结果为:
可以看到,圆柱体是绕着本地坐标系的Y轴旋转的。使用Space.Self进行旋转,旋转轴就是本地坐标系的坐标轴。
3、在script中使用 rotate 函数,在 Space.World 中旋转
下面测试 Space.World
图3、在Space.World中旋转
注意到这里 Parent 的 Y轴并不是 world 的 Y 轴,而这里的圆柱体明显是绕着世界坐标系下的 Y 轴旋转的,所以如代码所述, 使用Space.World旋转,旋转是绕着世界坐标系的坐标轴旋转的。4、静态欧拉角和动态欧拉角
前面说到的旋