創作內容

10 GP

Unity-Quaternion

作者:要你命3000│2015-07-12 20:48:40│巴幣:20│人氣:12513
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軸就是(100)跟(-100)  因為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
  

 
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2895331
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity3D

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

10喜歡★kr53778 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Unity3D 一些基本... 後一篇:Unity-StateM...

追蹤私訊切換新版閱覽

作品資料夾

pjfl20180818空氣
真糟糕看更多我要大聲說昨天10:35


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】