1. 程式人生 > >UGUI技術之LayoutGroup佈局實現詳解

UGUI技術之LayoutGroup佈局實現詳解

繼續學習unity4.6,unity的LayoutGroup分為三種, Horizontal Layout Group(水平佈局)Vertical Layout Group(垂直佈局)Grid Layout Group (網格佈局) 以前NGUI沒有這東西都是自己寫工具實現的。為什麼我們要佈局?我舉個例子,佈局的時候可以兩個cell 和三個cell都居中顯示。如下圖所示。。

尤其在獎勵視窗,因為獲取道具的數量是不固定的,所以需要根據不同數量的道具來居中對齊。如下圖所示,Padding 就是偏移,因為我的cell 是 95X95,為了居中所以這裡設定成 right = -95 top = -95。
Spacing 表示 cell之間的距離。
Child Alignment 表示對齊方式。
Child Force Expand 表示 自適應 寬 和高



在看看cell,注意Layout Group節點下面的所有cell節點都是不能修改Rect Transform的。因為cell可能下面會放很多圖片,這樣我們會用個空的gameObject來當父節點。但是這個gameObject的width 和 height 是最小單位,那麼Layout Group就不知道怎麼來算居中了。如下圖所示 這個時候就輪到LayoutElement登場了, 用它來設定一個cell的最大或者最小寬度。



如果執行時例項化後的gameObject 直接放在 Layout Group下面即可。Layout Group會自動計算佈局,真的是非常方便。

for(
int i =0 ;i <10;i++){ GameObject go = (GameObject)Instantiate(Resources.Load<GameObject>(“item”)); go.transform.parent = transform; go.transform.localScale = Vector3.one; }

還有個問題就是隱藏,比如把其中的一個cell setActive = false ,為了不計算隱藏的cell 所以要先把 IngonreLaytout = true 再 setActivity = false  這一切都可以在程式碼裡面來設定。



程式碼這樣即可。

gameObject.GetComponent<LayoutElement>().ignoreLayout = true; gameObject.SetActive(false);