• 《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相似,但第三个参数为每帧最大旋转角度而不是系数。

  • 相关阅读:
    伪句柄
    WM_NCACTIVE
    怎么让模态对话框最小化时,主窗口也最小化
    CMap和CArray中ARG_
    看着嫦娥2号上去,心里激动不已
    Qt中使两个部件同步,这里为spin和slider
    memcpy 和strcpy的区别
    如何在linux内核中读写文件
    Could not find *****/adb.exe!的解决方法(android sdk太新了?**#¥)
    加入了HTML特点的Qt,出来的效果不错哟
  • 原文地址:https://www.cnblogs.com/colve/p/5940532.html
Copyright © 2020-2023  润新知