動畫中
unity中的旋轉,通常用四元數和尤拉角來表示。它們都有優缺點。unity內部用四元數,在inspector中顯示尤拉角形式,因為該方法已於理解和編輯。
尤拉角由按照順序在x,y,z軸上進行的旋轉表示,當將乙個尤拉角應用到乙個gameobject時,每個軸上的旋轉都會被分別應用。
四元數可以被用來表示旋轉或物件的朝向。該數學模型,用4個數來表示(x,y,z,w),然而這些數字既不表示旋轉軸,也不表示旋轉角度,無法理解,所以我們不能直接修改xyz分量的值(w表示角度,可能會發生錯誤。除非你非常了解這背後的數學原理。
小秘密:軸和角度藏在四元數中。假設沿著軸(nx,ny,nz)旋轉,角度為a度,則四元數為:
[w, x, y, z] = [cos(a/2), sin(a/2)nx, sin(a/2)ny, sin(a/2)nz]
vector3可以表示位置和方向(當表示方向時,時原點在000點),乙個四元數可以表示朝向和旋轉,當表示旋轉時,是從identity開始的旋轉。四元數不能表達超過180度的旋轉。
unity用四元數來儲存gameobject的旋轉,因為四元數更加健壯。
但是在inspector面板上,顯示的旋轉是用尤拉角來表示的,因為尤拉角是可讀可編輯的。
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-1kdbpy1x-1580048145871)(
所以,可以看到,如果我們可以在inspector中設定x:0,y:365,z:0來設定物件的旋轉,因為四元數無法表達該旋轉,因此,啟動遊戲後,會變成x:0,y:5,z:0。效果相同。
當在指令碼中處理旋轉時,應該用四元數來建立或修改旋轉值。當然有些情況下,使用尤拉角也是有效的,但是要牢記,要使用四元數介面來處理尤拉角,從四元數獲取,修改,重新應用尤拉角到四元數,可能會產生錯誤的結果。
unity提供了介面,用來建立和操作四元數,而且不需要尤拉角的參與。例如
建立操作
尤拉角使用注意
然而,有時我們希望在**中使用尤拉角,這時,要將角度儲存到自己定義的變數中,並且用這些變數更新旋轉。因為以獲取->修改->應用尤拉角的流程寫**,會出錯,因為每次取得的尤拉角,是臨時從四元數計算出來的,每次計算可能返回不同的尤拉角,可能會導致萬向鎖問題。
// 正確
float x;
void update (
)// 錯誤
void update (
)
很多3d創作外掛程式,以及unity內部,都有自己的動畫視窗,來用尤拉角編輯動畫的旋轉。
這些旋轉,經常超過四元數表達的範圍,比如旋轉720度,尤拉角是沒問題的,但是對於四元數來說,等於沒有旋轉。
unity內部的動畫編輯視窗,提供了設定選項,來決定如何進行插值,用四元數或尤拉角。通過指定使用尤拉角,可以告訴unity我們想要在完整的運動範圍內插值。如果用四元數,則會限制在限定的範圍內(-180,180),並用四元數插值。
匯入的外部動畫資源,檔案通常會使用尤拉角記錄旋轉。預設unity會重新進行取樣動畫生成新的四元數動畫幀,以避免旋轉超出四元數有效範圍。
例如,想象有2幀動畫,相隔6幀。第一幀旋轉x=0,第二幀(6幀後)旋轉是270。如果直接用四元數在這兩幀之間進行插值,則動畫會沿著最短路徑旋轉,即向相反方向旋轉90度。但是通過重新取樣,將旋轉定義為6幀,沒幀是45度,這樣在進行四元數插值時,就正確了。
有時候,通過重新取樣,也不能達到跟原始動畫完全重合,這時,可以在動畫匯入設定中,關閉重新取樣選項(resample curves),在執行時使用尤拉角進行插值。
Unity 2D中UI隨滑鼠旋轉朝向滑鼠
詳細教程 1 canvas的render mode的三種模式介紹 1.screen space overlay可以理解為unity為你自動設定好了uicamera,而且這個相機的depth值是大於100的 相機能設定的最大depth值為100 2.screen space camera 將ui渲染在...
Unity程式設計 Unity中的尤拉旋轉
是z 軸與z 軸的夾角,是交點線與x 軸的夾角。xyz代表了三個角度,它們定義了一組有序的旋轉,即圍繞z軸旋轉z度,然後圍繞x軸旋轉x度,然後圍繞y軸旋轉y度。你應該只去讀取或者直接設定這些數值,不要增加它們,因為當角度超過360度將會失敗。應該使用transform.rotate去替代執行旋轉操作...
簡單聊聊 Unity中的 旋轉
今天來系統的學習一下unity中的幾種旋轉以及相應的一些經常用到的函式 我們平時看到的tranform裡的角就是尤拉角 這是尤拉角。這三個分量分別是繞x軸 y軸 z軸旋轉的角度。transform.rotate 軸,space.self 以自身座標係為參考 transform.rotate 軸,sp...