unity eulerAngle角度旋轉異常以及用四元數解決


今天做個簡單記錄

當用eulerangle歐拉角)做旋轉的時候 如果對多個軸需要旋轉的時候,因為旋轉順序我們無法控制,會導致得到的結果與原本期望不同,eulerangle的旋轉順序依次是Y-X-Z。解決這個問題的辦法就是使用四元數旋轉,控制旋轉順序。

四元數旋轉

四元數用於表示旋轉。

它們結構緊湊,不受萬向節鎖定的影響,可以輕松插補。Unity內部使用四元數來表示所有旋轉。

代碼示例如下

        float xangle = 180f;//x軸的旋轉角度
        float yangle = 70f;//y軸的旋轉角度
        float zangle = 60f;//z軸的旋轉角度
        Quaternion xq = Quaternion.AngleAxis(xangle, Vector3.right);
        Quaternion yq = Quaternion.AngleAxis(yangle, Vector3.up);
        Quaternion zq = Quaternion.AngleAxis(zangle, Vector3.forward);
        this.transform.localRotation = xq *yq* zq;//哪些軸旋轉 對應的四元數想乘就可以了 相乘順序代表的旋轉順序 后面的旋轉軸受前面的旋轉影響
//舉例說明:假如X軸旋轉180度,Z軸旋轉60度;假如用歐拉角表示eulerangle<180,0,60> 則表現結果卻是Z軸旋轉了-60度。原因則是因為X軸先旋轉,導致Z軸的正方向由指向屏幕內變成了指向屏幕外,然后在此 基礎上Z軸旋轉60度。
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM