Quaternion
這東西對於剛入門的我來說 ,非常複雜
每次看到都是!@#$%^&*()_
但這是最基本的東西,不能不學會
於是在這裡整理一下 ,目前已了解的相關知識及API如下
1.Quaternion是個四元數
而我們物體的rotation其實也是個四元數喔
聰明的朋友應該發現了 ROTATION就是一個Quaternion
所以通常要設定rotation的時候
在等號的右邊我們會使用Quaternion的相關API 避免他發生轉換問題
你說為什麼ROTATE可以直接用三元數轉呢
ROTATE是使用eulerAngles(歐拉角,是三元數)來旋轉的喔
所以我們ROTATE後面是不會接Quaternion相關API的
ROTATE跟ROTATION是不一樣的喔
ROTATE是一個FUNCTION
ROTATION是一個變數
2. 內定參數
(靜態參數)
Quaternion.identity( READ ONLY) : 毫無旋轉,回歸原始旋轉值,簡單來說就 rotation(0,0,0)
(一般參數)
Quaternion.eulerAngles :歐拉角,歐拉(數學家)幾何是數學的一個名詞,是一個三元數
通常就是(X,Y,Z),通常是為了方便當成三元數來設定所使用的參數名稱
3.建構子,這是OOP觀念,不多解釋
new一個Quaternion時它會Constructs new Quaternion with given x,y,z,w components.
(這是官網說明)
4.公用函式 簡單來說就是實例化之後的物件專用的
Set:設定XYZW四個元件,基本上不常用,除非你很清楚Quaternion背後的基底數學
(這已經扯到三角函數了,我也不懂XD)
SetFromToRotation:把物體某方向轉到某方向的rotation
舉個例子 x.SetFromToRotation (transform.forward, transform.up);
最後你再把物件的ROTATION=x
結果如下(請注意藍色軸)
我們把物體的FORWARD轉到UP了!
SetLookRotation: 基本上就是注視某方向(第一個參數)但可以確定哪一邊是上面(第二參數)
PS. 放在UPDATE裡面會一直執行喔跟LOOKROTATION一樣
ToAngleAxis:會OUT兩個參數 ,一個是角度0~180 ,一個是沿著哪一軸轉
例如X軸就是(1,0,0)跟(-1,0,0) 因為ANGLE出來沒有負數
轉(270,0,0) OUT出來就會是90跟(-1,0,0)
ToString:就把Quaternion轉成字串 以下是我用DEBUG.LOG去測試的
5.接下來就是靜態成員囉(沒有實例化才能用的喔)
Angle: 返回兩個輸入的ROTATION之間的旋轉的角度
float angle = Quaternion.Angle(transform.rotation, target.rotation);
雖然我不知道如果是兩個很難看的ROTATION 給出ANGLE可能也不好利用
AngleAxis:繞著某軸轉多少角度 AngleAxis(30,Vector3.up)
Dot:得出兩個ROTATION之間的內積,內積是什麼?
高中向量數學,不會的去GOOGLE,這說起來一大串
Euler:上面提過的歐拉角(X,Y,Z)的形式 就是一般你看到的
X就是沿著X軸轉幾度,Y,Z以此類推
FromToRotation:跟上面那個一樣SetFromToRotation是一樣的意思
這邊我就不多做解釋
Inverse: 就是一個反轉的API我也不多做解釋
Lerp: 從A ROTATION轉到B ROTATION以第三個參數為插值
簡單來說 就是會慢慢轉過去啦 比Slerp快一點
但如果轉的角度很大 會很難看
LookRotation:上面介紹過了,不多說,只要知道可以只輸入一個參數或兩個
一個就只是用LOOKAT但是沒有指定哪一邊是上面
有可能雖然看的方向對了 但身體不是我們要的狀態喔
RotateTowards: 跟SLERP很像,但旋轉角度保證不會超過第三個參數maxDegreesDelta
然後第三個參數如果為負值就是遠離TO的ROTATION直到轉到完全相反的角 度
Slerp:跟Lerp差不多,比較慢一點,應該是變化曲線不一樣
6. float angle = Quaternion.Angle(transform.rotation, target.rotation);
有時候你會發現直接這樣寫就行 代表他是靜態FUNCTION喔
有時候不行 他會顯示不能轉換VOID TYPE
這種時候代表你用的是PUBLIC的FUNCTION
你必須要先創一個Quaternion type的變數 再用PUBLIC的FUNCTION去設定他
再把這個變數設給你物體的ROTATION