今天做個簡單記錄
當用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度。