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分開(kāi)罪既。
與父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ì)布局如下圖:
相對(duì)布局如下圖:
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);