【UGUI學(xué)習(xí)筆記】RectTransform組件

RectTransform繼承于Transform


?????? 上圖中的中間九個(gè)按鈕叫做絕對(duì)布局(也有人叫九宮格),邊上的七個(gè)按鈕叫做相對(duì)布局。上圖只是為了讓用戶更好的操作,下圖才是它的數(shù)值:


???????Anchors的名字叫做錨點(diǎn),其存在最小點(diǎn)與最大點(diǎn),anchormin與anchormax均為向量。

???????在Anchor下面還有一個(gè)屬性叫Pivot,軸心。是坐標(biāo)原點(diǎn)在UI自身左下角的0-1空間向量。


???????設(shè)置紅色框體的Pivot時(shí),其坐標(biāo)系如圖所示,(0,0)表示紅色物體的左下角,(1,1)表示紅色物體的右上角。


???????下圖中黑色框體為父物體,紅色框體為當(dāng)前物體。設(shè)置紅色框體的anchor時(shí),其坐標(biāo)系如圖所示,(0,0)表示父物體的左下角,(1,1)表示父物體的右上角。中間的九個(gè)絕對(duì)布局就是anchormin與anchormax重合。邊上的七個(gè)相對(duì)布局就是anchormin與anchormax分開。


與父UI的關(guān)系:

?????? 當(dāng)UI處于絕對(duì)布局時(shí),軸心點(diǎn)與錨點(diǎn)之間的距離恒定。此時(shí)紅色框體的大小不會(huì)隨父物體的大小變化而變化,位置會(huì)根據(jù)Pivot點(diǎn)到Anchor點(diǎn)的距離一致而改變。

???????當(dāng)UI處于相對(duì)布局時(shí),錨點(diǎn)不再是一個(gè)點(diǎn),而是一個(gè)框子,通常稱之為錨框,有四個(gè)點(diǎn),anchormin表示左下角,anchormax表示右上角。此時(shí)紅色框體的左下角到錨框的左下角距離保持不變,紅色框體的右上角到錨框的右上角距離保持不變。此時(shí)紅色框體的四條邊與錨框的邊間距是固定的,紅色框體的大小隨父物體的大小變化而變化。

Pos (X, Y, Z) ,矩形軸心點(diǎn)(pivot)與錨點(diǎn)(anchors)之間的距離。

Left, Top, Right, Bottom,矩形的四條邊與錨框(anchors)之間的間距。

RectTransform的其他屬性:

?anchoredPosition:在絕對(duì)布局下,該屬性表示的是錨點(diǎn)到pivot的向量;在相對(duì)布局下,unity會(huì)根據(jù)Pivot、AnchorMin和AnchorMax計(jì)算出一個(gè)錨點(diǎn),該屬性表示的是計(jì)算出的錨點(diǎn)到Pivot的向量。

offsetmin、offsetmax:offsetmin表示的是當(dāng)前圖片的左下角相對(duì)錨框的左下角的偏移,offsetmax表示的是當(dāng)前圖片的右上角相對(duì)錨框的右上角的偏移。

絕對(duì)布局如下圖:


anchor為(0,0.5)
anchor為(0,0)

相對(duì)布局如下圖:


anchor為(0,0),(1,0)
anchor為(0,0),(1,1)

sizeDelta:尺寸變化量,該屬性表示offsetMax - offsetMin得到的向量,絕對(duì)布局下即從圖片的左下角指向右上角的向量。

sizeDelta可以動(dòng)態(tài)設(shè)置Rect大?。航^對(duì)布局下sizeDelta(x,y)與Rect的寬高是一致的,可以直接通過(guò)sizeDelta的x,y來(lái)動(dòng)態(tài)設(shè)置RectTransform的對(duì)應(yīng)的寬和高;相對(duì)布局下直接調(diào)整sizeDelta可以調(diào)整Rect大小,但是不好理解,通過(guò)offsetMin和offsetMax來(lái)動(dòng)態(tài)調(diào)整Rect的大小比較方便。

Rect:這是一個(gè)只讀屬性,前兩個(gè)參數(shù)是從Pivot指向UI自身左下角的向量,后兩個(gè)參數(shù)是UI自身的width和height。在絕對(duì)布局和相對(duì)布局下輸出一致。

改變RectTransform的top

GetComponent<RectTransform>().offsetMax = new Vector2(GetComponent<RectTransform>().offsetMax.x, top);

改變RectTransform的Right

GetComponent<RectTransform>().offsetMax = new Vector2(right,GetComponent<RectTransform>().offsetMax.y);

改變RectTransform的bottom

GetComponent<RectTransform>().offsetMin = new Vector2(GetComponent<RectTransform>().offsetMin.x, bottom);

改變RectTransform的left

GetComponent<RectTransform>().offsetMin = new Vector2(left,GetComponent().offsetMin.y);

改變RectTransform的width,height

GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);

改變RectTransform的pos

GetComponent<RectTransform>().anchoredPosition3D = new Vector3(posx,posy,posz);

GetComponent<RectTransform>().anchoredPosition = new Vector2(posx,posy);

RectTransform的方法:

void GetLocalCorners(Vector3[] fourCornersArray);?

該方法表示獲取UI的四個(gè)角在以自身Pivot為原點(diǎn)的坐標(biāo)系中的坐標(biāo)。作為參數(shù)的Vector3數(shù)組需要自己聲明。獲取四個(gè)角的順序是左下、左上、右上、右下。

void GetWorldCorners(Vector3[] fourCornersArray);

該方法表示獲取UI的四個(gè)角在世界坐標(biāo)系的坐標(biāo)。

void SetSizeWithCurrentAnchors(RectTransform.Axis axis,float size);

按照當(dāng)前的anchor信息來(lái)設(shè)置尺寸(實(shí)際上根據(jù)的是pivot,設(shè)置的結(jié)果與anchor無(wú)關(guān)),有兩個(gè)參數(shù),第一個(gè)是Axis類型的值,需要指定一個(gè)方向,水平或垂直;第二個(gè)參數(shù),是本身的寬高。

例:將寬高設(shè)為(100,30)。

RectTransform rt = GetComponent<RectTransform>();

rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,100);

rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,30);

void SetInsetAndSizeFromParentEdge(RectTransform.Edge edge,float inset,float size);

設(shè)置當(dāng)前UI相對(duì)父UI邊的距離及當(dāng)前UI的尺寸,第一個(gè)參數(shù)是一個(gè)Edge類型的值,需要指定以父對(duì)象的哪個(gè)邊為基準(zhǔn)(也就是Top、Bottom、Left、Right四個(gè)值之中的一個(gè),即對(duì)齊方式); 第二個(gè)參數(shù),是離指定邊的距離; 第三個(gè)參數(shù),是本身的寬度或者高度。

例:將寬高設(shè)為(100,30),與父UI的右邊間距為0,與底邊間距為0。

RectTransform rt = GetComponent<RectTransform>();

rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 100);

rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 30);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容