Quaternion类

Euler

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

功能: 返回Quaternion对应的欧拉角
例子:
public class ExampleClass : MonoBehaviour {
    public Quaternion rotation = Quaternion.Euler(0, 30, 0);
}

public class ExampleClass : MonoBehaviour {
    public Quaternion rotation = Quaternion.Euler(new Vector3(0, 30, 0));
}


ToAngleAxis 返回物体的旋转角度信息

public void ToAngleAxis(out float angle, out Vector3 axis);
参数: angle 旋转的角度
          axis 旋转轴,不一定是x,y,z轴

AngleAxis 创建围绕轴旋转某个角度的四元数

public static Quaternion AngleAxis(float angle, Vector3 axis);
参数: angle 旋转的角度
          axis 旋转轴,不一定是x,y,z轴

例子:
如果我们想使a,b两物体的旋转一样,可以这么做
public class ToAngleAxis : MonoBehaviour {

    // Use this for initialization
    private float angle = 0.0F;
    private Vector3 axis = Vector3.zero;
    public GameObject a;
    public GameObject b;
    void Start () {
        a.transform.rotation.ToAngleAxis(out angle, out axis);
        b.transform.rotation = Quaternion.AngleAxis(angle, axis);
    }
}

SetLookRotation 设置Quaternion实例的朝向

public void SetLookRotation(Vector3 view, Vector3 up = Vector3.up)
参数: view 朝向的向量
          up 向上的方向

例子:我们使一个物体朝向另一个物体
代码:
public class SetLookRotation: MonoBehaviour {
    public Transform target;
    void Start() {
        Vector3 relativePos = target.position - transform.position;
        Quaternion rotation = Quaternion.identity;
        rotation.SetLookRotation(relativePos,transform.up);
        transform.rotation = rotation;
    }
}

LookRotation 设置Quaternion实例的朝向

public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up);
参数: forward 朝向的向量
          up 向上的方向

public class LookRotation : MonoBehaviour {
    public Transform target;
    void Start() {
        Vector3 relativePos = target.position - transform.position;
        Quaternion rotation = Quaternion.LookRotation(relativePos);
        transform.rotation = rotation;
    }
}

效果



SetFromToRotation

public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection);
功能: 用于创建从fromDirection到toDirection的rotation。设有以下代码:
          Quaternion q1 = Quaternion.identity;
          q1.SetFromToRotation(v1,v2);
          transform.rotation = q1;
          则相当于将GameObject对象进行如下变换: 首先将GameObject对象自身坐标系的x,y,z轴方向
          和世界坐标系的x,y,z轴方向一致, 然后将GameObject对象自身坐标系中向量v1指向的方向旋转到v2方向。



FromToRotation

和 SetFromToRotation功能一样,只是用法不一样


Lerp 线性插值

public static Quaternion Lerp(Quaternion a, Quaternion b, float t);

功能:返回从a到b的线性插值,该方法速度比Slerp快
例子:
我们创建两个Cube,使其中一个Cube的朝向(z轴方向)指向另一个Cube
代码:
public class t_Quaternion_Slerp : MonoBehaviour {

    public Transform to;
    public float speed = 0.1F;
    Vector3 targetVector;
    Quaternion targetQuaternion = Quaternion.identity;
    void Start() {
        targetVector = to.position - transform.position;
        targetQuaternion = Quaternion.LookRotation(targetVector);
    }
    void Update()
    {
        transform.rotation = Quaternion.Lerp(transform.rotation, targetQuaternion,Time.deltaTime);
    }
}

效果:


Slerp 球面插值

public static Quaternion Slerp(Quaternion a, Quaternion b, float t);

功能:返回从a到b的球面插值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值