UnityAPI的学习——Quaternion类

本文详细介绍了Unity中Quaternion在对象旋转中的应用,包括eulerAngles属性、欧拉角的变换顺序、以及Quaternion类的实例方法如SetFromToRotation、SetLookRotation和ToAngleAxis等。
摘要由CSDN通过智能技术生成

Quaternion又称为四元数,由x、y、z和w这4个分量组成,属于struct类型。
在Unity中,用Quaternion来存储和表示对象的旋转角度。

Quaternion类实例属性

在Quaternion类中,涉及的实例属性主要有eulerAngles

eulerAngles属性:欧拉角

基本语法

public Vector3 eulerAngles{ get; set; }

功能说明:此属性用来返回或设置Transform实例对应的欧拉角
1、对GameObject对象的Transform进行欧拉加的变换次序,先绕z轴旋转相应的角度,再绕x轴旋转相应的角度,最后再绕y轴旋转相应的角度。并且不同的旋转次序得到的最终状态是不同的。
2、对GameObject对象的旋转角进行赋值的方式通常有两种:第一种是将Quaternion实例赋值给transform的rotation;第二种是将三维向量代表的欧拉角直接赋值给transform的eulerAngles。

 public Transform A, B;
    Quaternion rotations = Quaternion.identity;
    Vector3 eulerAngle = Vector3.zero;
    float speed = 10.0f;

    private void Update()
    {
        //第一种方式:将Quaternion赋值给transform的rotation
        rotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);
        A.rotation = rotations;
        //第二种方式:将三维向量代表的欧拉角直接赋值给transform的eulerAngles
        eulerAngle = new Vector3(0.0f, speed * Time.time, 0.0f);
        B.eulerAngles = eulerAngle;
    }

Quaternion类实例方法

在Quaternion类中涉及的实例方法有SetFromToRotation方法、SetLookRotation方法和ToAngleAxis方法。

SetFromToRotation方法:创建rotation实例

基本语法

public void SetFromToRotation(Vector3 fromDirection ,Vector3 toDirection);
    public Transform A, B, C;
    Quaternion q1 = Quaternion.identity;

    private void Update()
    {
        //不可直接使用C.rotation.SetFromToRotation(A.position , B.position);
        q1.SetFromToRotation(A.position, B.position);
        C.rotation = q1;
    }

SetLookRotation方法:设置Quaternion实例的朝向。

基本语法

1public void SetLookRotation(Vector3 view);
2public void SetLookRotation(Vector3 view , Vector3 up);

功能说明:此方法的功能是对一个Quaternion实例的朝向进行设置。

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

基本语法

public void ToAngleAxis(out float angle ,out Vector3 axis);
其中参数angle为旋转角,参数axis为轴向量

功能说明
此方法用于将Quaternion实例转换角轴表示。

Quaternion类静态方法

在Quaternion类中涉及的静态方法有Angle方法、Dot方法、Euler方法、FromToRotation方法、Inverse方法、Lerp方法、LookRotation方法、RotateTowards方法和Slerp方法。

Angle方法:Quaternion实例间夹角

基本语法

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

功能说明
此方法用于返回从参数a到参数b变换的夹角。需要注意的是,返回的夹角不是某个局部坐标轴向变换的夹角,而是GameObject对象从状态a转换到状态b时需要旋转的最小夹角。

Quaternion q1 = Quaternion.identity;
        Quaternion q2 = Quaternion.identity;
        q1.eulerAngles = new Vector3(10.0f, 20.0f, 30.0f);
        float f1 = Quaternion.Angle(q1, q2);
        float f2 = 0.0f;
        Vector3 v1 = Vector3.zero;
        q1.ToAngleAxis(out f2, out v1);

        Debug.Log("f1:" + f1);
        Debug.Log("f2:" + f2);
        Debug.Log("q1的欧拉角:" + q1.eulerAngles + "q1的rotation:"+q1);
        Debug.Log("q2的欧拉角:" + q2.eulerAngles + "q2的rotation:" + q2);

Dot方法:点乘

基本语法

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

功能说明
此方法用于求参数a和b的点乘

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

基本语法

1public static Quaternion Euler(Vector3 euler);
2public static Quaternion Euler(float x,float y,float z);

功能说明
此方法用于返回欧拉角Vector3(x,y,z)对应的四元数Quaternion实例。

FromToRotation方法:Quaternion变换

基本语法

public  static Quaternion FromToRotation(Vector3 fromDirection ,Vector3 toDirection);

功能说明
此方法用来创建一个从参数fromDirection到toDirection的Quaternion变换。

Inverse方法:逆向Quaternion值

基本语法

public static Quaternion Inverse(Quaternion rotation);

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

Lerp方法:线性插值

基本语法

public static Quaternion Lerp(Quaternion from ,Quaternion to , float t);

功能说明
此方法用于返回从参数from到to的线性插值

LookRotation方法:设置Quaternion的朝向

基本语法

1public static Quaternion LookRotation(Vector3 forward);
2public static Quaternion LookRotation(Vector3 forward ,Vector3 upwards);
其中参数forward为返回Quaternion的forward朝向

功能说明
此方法用于返回一个Quaternion实例,使GameObject对象的z轴朝向参数forward方向。

RotateTowards方法:Quaternion插值

基本语法

public static Quaternion RotateTowards(Quaternion from ,Quaternion to , float maxDegreesDelta);
其中参数from为起始Quaternion,参数to为结束Quaternion,参数maxDegreesDelta为每帧最大角度值

功能说明
此方法用于返回从参数from到to的插值,且返回值的最大角度不超过maxDegreesDelta。

Slerp方法:球面插值

基本语法

public static Quaternion Slerp(Quaternion from ,Quaternion to ,float t);

功能说明
此方法用于返回从参数from到to的球面插值

Quaternion类运算符

在Quaternion类中涉及的运算符运算有两个Quaternion实例相乘的运算,一个Quaternion实例和一个Vector3相乘的元素

operator *(lhs : Quaternion , rhs: Quaternion)

功能说明
此运算符用于返回两个Quaternion实例相乘后的结果

operator *(rotation : Quaternion , point : Vector3)

功能说明
此运算符的作用是对参数坐标点point进行rotation变换

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值