Unity中關於歐拉角的理解


        歐拉角eulerAngles在Unity3D是一個Vector3類的變量,官方約定俗成的層級關系是ZXY,即最里層是Z軸先旋轉,中間層是X軸,最外層是Y軸。

unity中的歐拉角有兩種方式可以解釋:
1,當認為順序是yxz時(其實就是heading - pitch - bank),是傳統的歐拉角變換,也就是以物體自己的坐標系為軸的。
2,當認為順序是zxy時(roll - pitch - yaw),也是官方文檔的順序時,是以慣性坐標系為軸的。后者比較直觀一些,但其實兩者的實際效果是一樣的,只是理解不一樣。

無論以何種方式旋轉三個軸,都會有出現萬向鎖的情況,萬向鎖主要在動畫里面旋轉時出現我們不希望見到的旋轉路徑,所以官方以ZXY順序來旋轉的時候可以最大程度上避免普通情況下會出現的萬向鎖。

當然最好的解決方法是使用四元數,但是由於我現在沒來得及深入學習,隨后再進行探討。

下面來說一下一些疑惑的代碼,梳理一下理解的順序:

float xm = 0, ym = 0, zm = 0;                       //設定三個浮點數用以保存主角的移動位置
float rh = Input.GetAxis("Mouse X");                //浮點數rh用來保存鼠標繞X軸的移動,rv用以保存繞Y軸的移動
float rv = Input.GetAxis("Mouse Y");

m_camRot.x -= rv;                                   //攝像機每秒繞X軸旋轉的歐拉角度
m_camRot.y += rh;                                   //攝像機每秒繞Y軸旋轉的歐拉角度

代碼的2,3行是取得鼠標繞X軸和Y軸的移動數據,m_camRot是一個歐拉角類型的變量,第4行代碼表示的是歐拉角m_camRot繞x軸旋轉的度數,第五行是繞y軸,如果不大懂可以看下圖:


鼠標上下移動(MouseY)改變的是X軸的旋轉數據,而左右移動(MouseX)改變的是Y軸的旋轉數據,至於Z軸的旋轉,由於普通的游戲設備無
法測量縱深變化值,所以極少需要改變用到,當然可以用鍵盤上的按鍵來虛擬,略過不說。


免責聲明!

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



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