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

  • 相关阅读:
    面向Java新手的日志 承 一 异常的使用
    现代JVM内存管理方法及GC的实现和主要思路
    现代Java EE应用调优和架构 大纲篇 (暂定名)
    无聊的解决方案
    代码生成器项目正式启动
    现代Java应用的性能调优方法及开发要点
    我的十年
    快慢之间 一个多线程Server疑难杂症修复记录
    面向Java新手的日志 起
    MongoTemplate项目启动
  • 原文地址:https://www.cnblogs.com/colve/p/5940532.html
Copyright © 2011-2022 走看看