2016年3月24日 星期四

Unity_C#_Quaternion_角度

*此教學使用Unity 5.3.2f1 (64-bit)免費版
*最後更新時間2016/03/24

position、localScale、Rotate可以用new Vector3就能達到效果, 但是不允許直接設置X.Y.Z的值而是必須先宣告Quaternion (四元數)

本文將教學: Unity角度的運用
                      Quaternion.Euler角度鎖定
                      transform.localEulerAngles判別式運用
 ----------------------------------------------------------------------------------------------------------




transform.Rotate可用於旋轉物件,例如轉動的風扇或螺旋槳
Quaternion.Euler可用於鎖定角度,不會旋轉,指定為多少就是多少不適合用來做平滑動作
Quaternion.identity 此為唯讀程式碼,可解釋為"不更動角度
transform.localEulerAngles.x 後面可加.x、.y、.z,用於判別式判斷角度,可用於搭配print除錯


先來看Rotaterotation的差別
 (以下程式碼寫在Update裡)
每次旋轉增加2度的寫法(一直轉):
gameObject.transform.Rotate (new Vector3 (0f, 0f, 2f));
直接就是2度的寫法(指定角度不動):
 gameObject.transform.rotation = Quaternion.Euler (0f, 0f, 2f);


接下來練習用Quaternion設置角度 

先宣告一個Quaternion : 

Quaternion quate = Quaternion.identity; 
然後設置角度:設置X軸方向旋轉45度
quate.eulerAngles = new Vector3(45, 0, 0); 
然後再把quate賦予給Gameobject: 
gameobject.transform.rotation = quate; 


transform.localEulerAngles可用於有關角度的判別式,例如

    void FixedUpdate()
    {
        if (Input.GetMouseButton(1))
        {
            if (transform.eulerAngles.z <= 10)
            {  transform.Rotate(Vector3.forward * Time.deltaTime * 10);> }
        }
        else
        {
            if (transform.eulerAngles.z > 0)
            {
                transform.Rotate(-Vector3.forward * Time.deltaTime * 10);
                if (180.0f < transform.eulerAngles.z)
                {  transform.eulerAngles = Vector3.zero;
            }
        }
    }

沒有留言:

張貼留言