UGUI RectTransform 代碼修改錨點和軸心

基本規律

記住一個對應關係即可

  • Top => 1

  • Middle => 0.5

  • Bottom => 0

  • Left => 0

  • Center => 0.5

  • Right => 1

遞增規律:從左到右(x),從下到上(y)

無論是錨點還是軸心,當 x 或 y 的取值爲:

  • [0, 1] 時,表示點在對象區域內

  • < 0>1 時,表示該點在對象範圍之外

 

錨點(Anchor)

UGUI 中的錨點是用來管理子節點與其父節點相對關係的一個屬性,主要可以分 24 中類型,也可以分爲兩大類:

  • 16 種標準的對齊方式:

        

  • 6 種自定義對齊方式:

     

而不管是上面的哪種方式,本質上都可以通過 RectTransform 中的 Anchors 設置先中的 MinMax 設置不同的值來實現,而通過代碼動態修改錨點的對齊方式便是利用這兩個參數來實現的

 

1. 16種標準對齊方式對應的 Anchor 設置

直接設置 RectTransform 組件的 anchorMinanchorMax 屬性就可以了,這兩個屬性使用的都是 Vector2 類型的數據,如下:

RectTransform rectTrans = transform.GetComponent<RectTransform>();
  • 左上(LeftTop)

    rectTrans.anchorMin = new Vector2(0, 1);
    rectTrans.anchorMax = new Vector2(0, 1);
  • 中上(CenterTop)

    rectTrans.anchorMin = new Vector2(0.5f, 1);
    rectTrans.anchorMax = new Vector2(0.5f, 1);
  • 右上(RightTop)

    rectTrans.anchorMin = new Vector2(1, 1);
    rectTrans.anchorMax = new Vector2(1, 1);

可以看到大致的規律:Vector 變量中:

  • x:表示從左到右的錨點位置上下限

  • y:表示從下島上的錨點位置上下限

min 表示下限值,max 表示上限值,因此 min 的 x 和 y 必定小於等於 max 的 x 和 y

 

2. 8種自定義對齊方式和 anchoredPosition

標準對齊方式的參數值只有 0、0.5 和 1 三個取值,而自定義對齊方式的參數值可以是任意值,表示當前錨點在其所綁定節點的垂直和水平方向的一個座標值,起點是左下角。

 

軸心(Pivot)

Pivot,即轉軸或軸心,是賴以旋轉的基礎。

在 UGUI 中,軸心位置可以直接通過設置 Pivot 屬性來控制,使用的是 Vector2 類型的數據,其中 x 和 y 分別表示軸心在當前對象水平和垂直方向是的一個比例值,如:x = 0.5,y = 0.5 表示垂直和水平方向上的中心點。

可以將當前物體看作一個以左下角爲原點,上限值爲 1 的座標系,軸心就是該座標系中的一個座標點。其中,x 表示水平方向的,y 表示垂直方向

1. 旋轉

當修改當前組件的 Rotation 從而使該 GameObject 旋轉時,便是繞 Pivot 進行的。

  • 將 Pivot 設爲 (0.5, 0.5),則軸心在中心點,效果如下:

  • 將 Pivot 改爲 (0, 0.5),即軸心在左側中心點,效果如下:

2. 修改大小

修改 Scale 進行縮放修改對象大小的話,也是以軸心爲基礎。同理,當通過組件的 Width 或 Height 修改大小,也是以 Pivot 作爲固定點向外延伸。

  • 將 Pivot 設爲 (0.5, 0.5),則軸心在中心點,改變 Width 時以中心往兩邊延伸:

  • 將 Pivot 改爲 (0, 0.5),即軸心在左側中心點,改變 Width 只往右側軸心反方向延伸:

3. 代碼設置

可以在代碼中動態修改當前組件的軸心位置:

RectTransform rectTrans = transform.GetComponent<RectTransform>();
rectTrans.pivot = new Vector2(0.5f, 0.5f);// 中心點
rectTrans.pivot = new Vector2(0, 0);      // 左下角

 

動態修改 RectTransform 的 Left, Bottom, Right 和 Top 參數

通過兩個屬性修改:

  • offsetMin:對應 (Left, Bottom)

  • offsetMax:對應 (-Right, -Top)

例如邊距都是 10 的話,用代碼動態設置如下:

RectTransform rectTrans = transform.GetComponent<RectTransform>();
rectTrans.offsetMin = new Vector2(10, 10);
rectTrans.offsetMax = new Vector2(-10, -10);

 

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章