1.RectTransform 介紹
- RectTransform 繼承自 Transform
- 相對(duì)于Transform,RectTransform增加了兩個(gè)用于UI適配的屬性,分別是:Anchor(錨點(diǎn)) 和 Piont(軸心點(diǎn))
- Transform,RectTransform,Rect
類 | 說(shuō)明 |
---|---|
Transform | 記錄并表示,一個(gè)3D物體在 三維空間 中的 位置 、 旋轉(zhuǎn) 和 縮放 三種屬性 |
RectTransform | 記錄并表示,一個(gè)2D UI元素 在屏幕中的位置、旋轉(zhuǎn)、和縮放三種屬性 |
Rect | 表示2D矩形,常用來(lái)處理表示2維矩形,設(shè)置x、y位置和寬度、高度。( 你可以理解為用來(lái)描述一個(gè)矩陣的長(zhǎng)寬 ) |
2.Anchor 錨點(diǎn)
對(duì)錨點(diǎn)的不同設(shè)置,RectTransform會(huì)出現(xiàn)不同屬性(左右屬性不會(huì)同時(shí)出現(xiàn))
Pos X (Anchors X 到 Pivot Y 的距離) —— Left
Pos Y (Anchors Y 到 Pivot Y 的距離) —— Top
Width (UI 元素寬度) —— Right
Height ( UI 元素高度) —— Bottom
1.當(dāng) UI 四個(gè)錨點(diǎn)都在一起時(shí)
2.當(dāng) X 方向錨點(diǎn)分開時(shí)
3.當(dāng) Y 方向錨點(diǎn)分開時(shí)
4.當(dāng) X Y 方向錨點(diǎn)都分開時(shí)
3.Pivot 軸心點(diǎn)
軸心點(diǎn)的不同,會(huì)造成UI的縮放/旋轉(zhuǎn)效果不同,以及與父物體形成的 UI 適應(yīng)問(wèn)題
4.RectTransform API 屬性
4.1 anchorMax、anchorMin —— 錨點(diǎn)矩形
Anchors的Min和Max分別是歸一化的位置值(從0到1),表示占父RectTransform的百分比
4.2 offsetMax、offsetMin —— 偏移量
offsetMax:
當(dāng)前UI矩形右上角相對(duì)于錨點(diǎn)右上角的偏移(UI元素的右上角的坐標(biāo),減去右上角錨點(diǎn)的坐標(biāo))
offsetMin:
當(dāng)前UI矩形左下角相對(duì)于錨點(diǎn)左下角的偏移(UI元素的左下角角的坐標(biāo),減去左下角錨點(diǎn)的坐標(biāo))
4.3 rect —— 矩形類
rect中的屬性,不與UI元素所在的位置有關(guān),只和其自身屬性相關(guān)
rect.width,rect.height:
UI元素的寬高
rect.x,rect.y:
矩形左下角相對(duì)于中心點(diǎn)的x和y坐標(biāo)
4.4 sizeDelta —— UI坐標(biāo)
sizeDelta是offsetMax-offsetMin的結(jié)果。
-
錨點(diǎn)情況下的sizeDelta
此時(shí),設(shè)置sizeDelta的X,Y值,可以直接調(diào)整UI元素的大小 -
錨框情況下的sizeDelta
sizeDelta.x:
錨框的寬度與UI元素的寬度的差值
sizeDelta.y:
錨框的的高度與UI元素的高度的差值
4.5 anchoredPosition —— UI坐標(biāo)
-
錨點(diǎn)情況
anchoredPosition UI元素Pivot到Anchor的距離2.
-
錨框情況
anchoredPosition UI元素Pivot到錨框中心點(diǎn)的距離
5.RectTransform API 方法
5.1 SetSizeWithCurrentAnchors(Animations.Axis axis, float size)
這個(gè)方法無(wú)論在絕對(duì)布局還是相對(duì)布局的情況下,都可以通過(guò)直接設(shè)置rect中的width和height值來(lái)改變UI元素的大小。
rectTransform = GetComponent<RectTransform>();
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 100); // 寬度
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 100); // 高度
5.2 SetInsetAndSizeFromParentEdge (RectTransform.Edge edge, float inset, float size);
根據(jù)父物體的 Edge(某一邊)去布局
參數(shù):
- 確定基準(zhǔn)的邊RectTransform.Edge.Top(Bottom, Left, Right)
- UI元素的該邊界與父物體該邊界的距離
- 設(shè)定選定軸上UI元素的大小
注意:使用次方法會(huì)改變UI的錨點(diǎn)
- 以左邊界為基準(zhǔn)時(shí),anchorMin 和 anchorMax 的y不變x變?yōu)?.
- 以右邊界為基準(zhǔn)時(shí),anchorMin 和 anchorMax 的y不變x變?yōu)?.
- 以上邊界為基準(zhǔn)時(shí),anchorMin 和 anchorMax 的x不變y變?yōu)?.
- 以下邊界為基準(zhǔn)時(shí),anchorMin 和 anchorMax 的x不變y變?yōu)?.
例:
rectTran.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 100, 200);
5.3 GetWorldCorners (Vector3[] fourCornersArray) ----- 取得UI元素四個(gè)角的世界坐標(biāo)
順序?yàn)椋鹤笙?-> 左上 -> 右上 -> 右下文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-431281.html
5.4 GetLocalCorners (Vector3[] fourCornersArray) ----- 取得UI元素四個(gè)角的本地坐標(biāo)
6.常用方法
6.1 獲取UI寬高
// 錨點(diǎn)情況下
Vector2 size = rectTran.sizeDelta;
// 最安全獲取
float width = rectTran.rect.width;
float height = rectTran.rect.height;
6.2 設(shè)置UI寬高
// 錨點(diǎn)情況下
rectTran.sizeDelta = new Vector2(200, 200);
// 最安全設(shè)置寬高
rectTran.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 400);
rectTran.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 200);
6.3 設(shè)置布局方式
rectTran.anchorMin = new Vector2(0, 0);
rectTran.anchorMax = new Vector2(1, 0);
rectTran.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, rectTran.parent.GetComponent<RectTransform>().rect.width);
rectTran.anchoredPosition = new Vector2(0, 0);
rectTran.pivot = new Vector2(0.5f, 0);
rectTran.anchoredPosition = new Vector2(0, 0);
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431281.html
到了這里,關(guān)于Unity RectTransform 組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!