欧拉角
三个数字来保存方位,共用vector3,但此时它不代表向量。
优点
•仅使用三个数字表达方位,占用空间小。
•沿坐标轴旋转的单位为角度,符合人的思考方式。
•任意三个数字都是合法的,不存在不合法的欧拉角。
//欧拉角,每次叠加(1,0,0)旋转
transform.eulerAngles+=transform.right;
//与前者等效,但实际涵义不同,内部使用的四元数
transform.Rotate(transform.right);
缺点:
对于一个方位,存在多个欧拉角描述,因此无法判断多个欧 拉角代表的角位移是否相同。
例如角度250,0,0与角度290,180,180是同一个欧拉角,难以直观判断。
为了保证任意方位都只有独一无二的表示,Unity引擎限制 了角度范围,即沿X轴旋转限制在-90到90之间,沿Y与Z轴 旋转限制在0到360之间。
欧拉角会造成万向节死锁。
四元数
因为欧拉角的缺点,数学家提出了四元数。
缺点:
难于使用,不建议单独修改某个数值。
•存在不合法的四元数。
两个四元数相乘可以组合旋转效果,四元数不能使用+号,表示叠加关系是*号
//物体沿自身y轴旋转1°
transform.rotation *= Quaternion.Euler(0,1,0);
//下面两行等价
//Quaternion.Euler(0, 30, 0) *Quaternion.Euler(0, 20, 0)
//Quaternion.Euler(0, 50, 0);
四元数左乘向量,表示将该向量按照四元数表示的角度旋转:
Vector3 point = new Vector3(0,0,10);
Vector3 newPoint= Quaternion