關於Unity中RectTransform與transform的區別

以前一直以為在Inspector面板上的是Transform,後來才發現原來2D是RectTransform,3D是Transform

3D面板上顯示的是位置坐標組件Transform,2D面板上顯示的是位置坐標組件RectTransform

RectTransform是Transform的子類

可以這樣強制轉換,反過來則不行

gameObject.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(x,y,z);

”錨點“在”父物體“中的位置和樣式,取值范圍為0(父物體左下) – 1(父物體右上)。
當值的最大和最小不相同的時候表示一個區間,這時錨點會散開,錨點的一邊在最小值上,錨點的一邊在最大值上,都一樣的時候就會如上圖在一個點上
特性: 決定當父物體改變的時候子物體的位置和 大小

RectTransform是繼承transform的,它是針對unity中ui的,具體在表現上可以這樣看待,凡是在在canvas組件下或者具有canvas組件的2d對象,他都recttransform組件,那些在3d空間下沒有不受canvas控制的對象都是transfrom組件。
關於recttransform的坐標設置,我們在設置ui對象的坐標的時候設置的都是recttransform的坐標,他是相對於自身錨點的,和父對象的中心點沒有關系應該這樣設置。

 

RectTransform組件還有一個anchoredPosition字段,它是忽略z坐標的,一般使用anchoredPosition3D 進行設置
我們通常也會這樣設置ui的坐標

gameObject.transform.localPosition = new Vector3(x,y,z)

 

但其實這樣是不準確的,它的位置是相對於父節點的中心點的,隻有在特殊條件下才會正確,就是在父節點的中心點和子節點的錨點是重合的情況下才是正確的。

可以看到屬性面板中anchors的min和max相等的時候,也就是錨點是一個點的時候屬性面板中設置坐標是Posx posy, posz。如果錨點不是重合的情況下

 

 

此時,他的屬性面板是這樣的

 

 

變成瞭left,top,posZ,right,bottom
分別代表距離左上右下和z軸的距離。

 

 

 

是用來計算坐標的,即表示,自己點的哪個位置相對錨點的坐標
總結:

gameobject.transform.localposition =

這種方式是子節點的中心點piovt相對於父節點的中心點poivt的對標

Vector3 vector3 = gameObject.GetComponent<RectTransform>().anchoredPosition3D=

這鐘是子節點的中心點相對自身的錨點的坐標和父節點沒有關系

到此這篇關於Unity中RectTransform與transform的區別的文章就介紹到這瞭,更多相關Unity RectTransform與transform 區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: