unity3d中Transform組件變量詳解


Transform組件是每個游戲對象必須有的一個組建,因為你創建一個空物體,它也有該組建,因為unity3d是面向組建開發的一款游戲引擎。通過一張圖片來看看它的屬性

 

 

 你可以在通過代碼查看這些屬性的區別

        Debug.Log("position " + transform.position); //世界坐標的位置
        Debug.Log("localPosition " + transform.localPosition); //相對於父位置的坐標 即把父物體當作自己的中心

        Debug.Log("eulerAngles " + transform.eulerAngles);//世界坐標歐拉⾓度

        Debug.Log("localEulerAngles " + transform.localEulerAngles);//相對於⽗級的變換的旋轉歐拉⾓度

        Debug.Log("localScale " + transform.localScale);//相對於父位置的縮放

        Debug.Log("localRotation " + transform.localRotation);//相對於父位置的旋轉

        Debug.Log("rotation " + transform.rotation);//世界坐標的旋轉

 

 

上面提到了父位置?那是什么意思呢?

現在創建兩個cube 命名為cube1和cube2 把cube2作為cube1的子對象,如圖。

 

可以看到,cube1的坐標(1,0,0) cube2的坐標為(0,0,5)

那么通過transform.localPosition獲取cube2的坐標則為(0,0,5)

如果用transform.position獲取cube2的坐標則為(1,0,5)

那么寫個腳本測試下。寫個腳本掛載到cube2上

在腳本的Start方法中如下寫

void Start()
    {
        Debug.Log("cube2的世界坐標為:" + transform.position);
        Debug.Log("cube2的本地坐標為:" + transform.localPosition);
    }

 

 

運行后看結果

因為:cube2把父對象(Cube1)當作了自己的的中心。所以是(0,0,5),那它的世界坐標則為(1,0,5),知道了這個position那localRotation也是同樣的道理

但有沒有注意到。這里的歐拉角(eulerAngles),rotation和Rotate(),都是用於旋轉,那他們有什么區別呢。剛開始我也是犯糊塗

Rotate()方法需要一個vector3三維向量,rotation是用四元素旋轉(Quaternion)

來看看聖典上面的解釋:

 

 

 

 

 歐拉角(eulerAngles)旋轉很好理解。當你改變Transform組建中的 x,y,z的角度。就是改變其歐拉角

現在來看看rotation屬性和Rotate()方法之間有什么區別

我認為通過測試是對兩者差異的最好理解。

先看Rotate()方法

在場景中創建一個Capsule,寫個腳本。代碼如下

void Update()
    {
       
        transform.Rotate(Vector3.up  * 5);

    }

 

 

 運行看看效果:

可以看到對象是旋轉一直是在累加5,如果你感覺不出來。我這里調試。一幀一幀給你看

 

然后用旋轉同樣的角度。測試rotation屬性

    void Update()
    {

        transform.rotation = Quaternion.Euler(Vector3.up  * 5);

    }

 

 

 同樣看效果

 

 從上圖可以看出,Capsule旋轉到5就不動了。也就是每次旋轉都是同樣的值,

所以:我的理解是:

Rotate()方法是:旋轉多少度。在原有的基礎上累加,即旋轉了多少角度。又旋轉了多少角度,是在原有的基礎上在旋轉

rotation屬性是:旋轉到某個角度,就是是在update中每幀都執行(我這里測試是放在了update中)。但每次旋轉到的角度動是5,所以是旋轉到5度。一直都是

比如你只想讓他旋轉到多少,用rotation;假如想讓他一直轉,可以用Rotate

rotation直接改變了數值,以達到旋轉效果

Rotate應用一個的旋轉角度每秒1度慢慢的旋轉物體

 

當然:rotation()還可以通過插值旋轉,

關於插值的理解:

http://www.unitymanual.com/blog-42778-2524.html?_dsign=7036aadd

 


免責聲明!

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



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