RectTransform設置遊戲對象大小位置的時候,不僅在Unity編輯器中與Transform不一樣,程序控制上也不一樣。
RectTransform作爲一個組件存在於遊戲對象上,所有控制方法和屬性都在該組件下。
RectTransform下的rect類可以獲取遊戲對象的寬(rect.width)和高(rect.height),但是不可以直接設置。
Pivot 軸心和 Anchors 錨點
RectTransform類下的pivot屬性可以用於獲取和設置遊戲對象的軸心。
RectTransform類下的anchorMin和anchorMax屬性可以用於獲取和設置遊戲對象的錨點。
通常修改軸心或者錨點都會讓UI的位置或大小發生變化。
offset 錨點偏移
錨點偏移是2個矢量,一個是從左下角的錨點到遊戲對象的左下角,一個是從右上角的錨點到遊戲對象的右上角。無論當前錨點是形成點,線或者矩形,都能通過這樣2個矢量來設置遊戲對象的位置和大小。
SetSizeWithCurrentAnchors
offset錨點偏移用於定位遊戲對象比較方便,如果只是設置大小會略顯麻煩,特別是在遊戲對象進行大小變化的是。這個時候推薦使用SetSizeWithCurrentAnchors方法來設置大小。
SetSizeWithCurrentAnchors方法的第一個參數是選擇設置寬(RectTransform.Axis.Horizontal)還是高(RectTransform.Axis.Vertical),第二個參數是具體大小。
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 200);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 100);
anchoredPosition
anchoredPosition屬性是一個矢量,通過該矢量可以獲取及設置當前遊戲對象的位置。
首先,根據遊戲對象的軸心,計算出在錨點矩陣中的參考點位置。
- 如果是矩陣,則參考點到軸心的矢量即爲anchoredPosition。
- 如果是線段,則錨點矩陣減少一個維度後,參考點的對應位置到軸心的矢量即爲anchoredPosition。
- 如果是點,則是從錨點到軸心的矢量即爲anchoredPosition。
SetInsetAndSizeFromParentEdge
SetInsetAndSizeFromParentEdge方法是以父遊戲對象的上、下、左、右4個點中的一個作爲參照,同時設置遊戲對象到該點的距離和對應方向上的值。
簡單總結
- 在程序中,修改軸心和錨點比較容易,只是修改完以後,都需要重新設置一下游戲對象的大小和位置。
- offset錨點偏移設置位置和大小比較方便,但是如果要實現移動或者變形動畫就比較麻煩。
- 變形推薦使用SetSizeWithCurrentAnchors方法,移動推薦使用anchoredPosition屬性,因爲這2種做法和錨點無關,在任何情況下都能使用。
- SetInsetAndSizeFromParentEdge可以同時設置位置和大小,但是會修改錨點。僅推薦遊戲對象原有參考本身就是父遊戲對象4邊中間的點的時候使用。