首页 > 代码库 > 《Unity_API解析》 第八章 Quaternion类

《Unity_API解析》 第八章 Quaternion类

Quaternion又称四元数,由x、y、z和w这4个分量组成,属于struct类型。在Unity中,用Quaternion来存储和表示对象的旋转角度。对于GameObject一般的旋转及移动,可以用Transform中的相关方法实现。

Quaternion类实例属性
eulerAngles属性:欧拉角
功能说明 此属性用来返回和设置Quaternion实例对应的欧拉角,说明如下。
1.对GameObject对象的Transform进行欧拉角的变换次序是,zxy轴依次旋转。不同的旋转次序得到的最终状态不同。
2.对GameObject对象的旋转角进行复制的方式通常有两种:第一种是将Quaternion实例赋值给transform的rotation,第二种是将三位向两代表的欧拉角直接赋值给transfrom的eulerAngles。

 

Quaternion类实例方法
SetFromToRotation方法:创建rotation实例
public void SetFromToRotation(Vector3 fromDirection,Vector3 toDirection);
功能说明 此方法用于创建从fromDirection到toDirction的rotation。
提示 不可直接对自身进行SetFromToRotation方式进行设置,只能将实例化的Quaternion赋值给transform.rotation。

 

SetLookRotation方法:设置Quaternion实例朝向
1.public void SetLookRotation(Vector3 view);
2.public void SetLookRotation(Vector3 view, Vector3 up);
功能说明 此方法的功能是对一个Quaternion实例的朝向进行设置。设如下代码:
Quaternion q1 = Quaternion.identity;
q1.SetLookRotation(v1, v2);
transfrom.rotation = q1;
则1.transform.forward方向与v1方向相同。
2.transform.right垂直于由Vector3.zero,v1和v2这三点构成的平面。
3.v2除了与Vector3.zero和v1构成平面来绝顶transform.right的方向外,还用来绝顶transform.up的朝向,因为当transform.forward和transform.right方向确定后,transform.up方向剩下两种可能,到底选用哪一种便有v2来影响。transform.up方向的选取方式总会使得transform.up的方向和v2方向的夹角小于或等于90度。当然,一般情况下v2.normalized和transform.up是不相同的。
4.当v1位Vector3.zero时,即不要在使用此方法时把v1设置成Vector3.zero。

 

ToAngleAxis方法:Quaternion实例的角轴表示

public void ToAngleAxis(out float angle,out Vector3 axis);

此方法用于将Quaternion实例转换为角轴表示,在transform.rotation.ToAngleAxis(out angle, out axis)中,输出值的含义为将对象的rotation从Quaternion.Identity状态转换为当前的状态,需延世界坐标系中axis轴向旋转angle角度。

提示 此方法通常和静态方法AngleAxis(float angle, Vector3 axis)一起使用。

 

Quaternion类静态方法

Angle方法:Quaternion实例间夹角

public static float Angle(Quaternion a, Quaternion b);

此方法返回从参数a到参数b需要旋转的最小角度。相当于上面实例方法ToAngleAxis方法的第一个返回值。

 

Dot方法:点乘

public static float Dot(Quaternion a, Quaternion b);

此方法用于求参数a b的点乘,返回值范围为[-1, 1]。

当返回值为±1时,两个参数对应的欧拉角相等,即旋转状态一致。

当返回值为1时,两参数rotation相等。

当返回值为-1时,其中一个rotation比另一个多旋转了一周。

 

Euler方法:欧拉角对应的四元数

public static Quaternion Euler(Vector3 euler);

public static Quaternion Euler(float x, float y, float z);

此方法用于返回欧拉角Vector3对应的四元数实例。

 

Inverse方法:逆向Quaternion值

public static Quaternion Inverse(Quaternion rotation);

此方法用于返回参数rotation的逆向Quaternion值。

 

RotateTowards方法:Quaternion插值

public static Quaternion(Quaternion from, Quaternion to, float maxAngle);

此方法与lerp相似,但第三个参数为每帧最大旋转角度而不是系数。

《Unity_API解析》 第八章 Quaternion类