解释
四元数用于表示旋转。
它们结构紧凑,不受万向节锁定的影响,可以轻松插值。Unity内部使用四元数表示所有旋转。
它们基于复数,不容易直观地理解。您几乎永远不会访问或修改单个四元数组件(x,y,z,w);大多数情况下,您只是采用现有的旋转(例如:Transform),并使用它们来构建新的旋转(例如在两个旋转之间平滑地插值)。您使用99%的时间的Quaternion函数是: Quaternion.LookRotation,Quaternion.Angle,Quaternion.Euler,Quaternion.Slerp,Quaternion.FromToRotation和Quaternion.identity。(其他功能仅用于特殊用途。)
Unity的Transform组件里的Rotation是四元数,但是它是以欧拉角(Vector3)的形式展现在我们面前,目的就是为了方便我们修改。因此,我们给Rotation直接赋值的时候,也只能用Quaternion赋值。
下面是实例应用(四元数和欧拉角)
//把对象欧拉角(eulerAngles )全部设置为45°
transform.eulerAngles = new Vector3(45, 45, 45);
//把欧拉角转换为四元数,再赋值
transform.rotation = Quaternion.Euler(new Vector3(45, 45, 45));
//将四元数转换为欧拉角
Vector3 angles = transform.rotation.eulerAngles;
属性或函数 | 描述 | 例子 |
---|---|---|
eulerAngles | 返回或设置旋转的欧拉角 | transform.eulerAngles = new Vector3(45, 45, 45); |
Angle | 返回两个旋转a和b之间的角度。 | Quaternion.Angle(Quaternion a, Quaternion b); |
Euler | 返回绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度的旋转;按这个顺序应用。 | Quaternion.Euler(float x, float y, float z); |
LookRotation | 创建具有指定的正向和向上方向的旋转。 | Quaternion.LookRotation(Vector3 forward, Vector3.up); |
Slerp | 通过t在a和b之间进行球面插值。参数t被夹在[0,1]范围内。 | Quaternion.Slerp(Quaternion a, Quaternion b, float t); |
FromToRotation | 创建一个从一个方向旋转到另一个方向的旋转。 | Quaternion.FromToRotation(Vector3 fromDirection, Vector3 toDirection); |
identity | 就是指Quaternion(0,0,0,0) | transform.rotation = Quaternion.identity; |
网友评论