天天看點

Unity的旋轉-四元數,歐拉角用法簡介

當初弄不明白旋轉。。居然找不到資料四元數應該用軸角相乘。。。

通過兩種旋轉的配合,可以告别世界空間和本地空間矩陣轉換了,大大提升效率。

每個軸相乘即可,可以任意軸,無限乘。無萬向節鎖問題

四元數旋轉:

Unity的旋轉-四元數,歐拉角用法簡介
Unity的旋轉-四元數,歐拉角用法簡介

using UnityEngine;
using System.Collections;

public class RotationTest : MonoBehaviour
{
    public float x, y, z;
    
    
    void Start ()
    {
    
    }
    
    void Update ()
    {
        var xRot = Quaternion.AngleAxis(x, new Vector3(1,0,0));
        var yRot = Quaternion.AngleAxis(y, new Vector3(0,1,0));
        var zRot = Quaternion.AngleAxis(z, new Vector3(0,0,1));
        
        transform.rotation = xRot*yRot*zRot;
    }
}      

View Code

歐拉角旋轉适合本地坐标旋轉,按世界坐标軸旋轉用四元數旋轉,并且需要注意萬向節鎖問題

歐拉角旋轉:

Unity的旋轉-四元數,歐拉角用法簡介
Unity的旋轉-四元數,歐拉角用法簡介
using UnityEngine;
using System.Collections;

public class RotationTest : MonoBehaviour
{
    public float x, y, z;
    
    
    void Start ()
    {
    
    }
    
    void Update ()
    {
        transform.rotation = Quaternion.Euler(new Vector3(x,y,z));
        
        Debug.Log("xyz : "+transform.rotation.eulerAngles);
    }
}