以Unity 5.5 的官方文檔爲例html
UI元素的先後順序:SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex函數
文檔:https://docs.unity3d.com/Manual/UIBasicLayout.html佈局
使用Anchor時,能夠是相對於父節點的,好比Anchor在Left,四個三角形是在左邊的性能
LayoutElement 不直接修改元素的size,但提供信息供Layout Controllerui
一個gameobject上綁定了Rect Transform就能夠稱爲LayoutElementspa
Image和Text 在屬性面板提供了Preferred width和 height3d
能夠添加Layout Element組件來重寫Min ,Preferred ,Flexible sizecode
文檔:https://docs.unity3d.com/Manual/UIAutoLayout.htmlorm
Layout Element 在 Layout group 的size 遵尋如下的原則:htm
那些是Layout Controller?
Content Size Fitter (內容)
Aspect Ratio Fitter(縱橫比,高寬比)
Layout Groups (水平,垂直,Grid)
自動佈局系統評估和執行佈局按照如下順序:
1. Min 、Preferrd 、Flexible 的寬度計算經過 ILayoutElement. CalculateLayoutInputHorizontal,這是自下而上的順序執行,Child會比Parent先計算,這樣在計算Parent時會考慮Child的信息
2. 影響佈局元素的有效寬度經過ILayoutController.SetLayoutHorizontal ,自上而下的順序執行,Child會比Parent後計算,由於Child的寬度分配在於Parent,而後修改RectTransform的新寬度
3. Min、Preferrd、Flexible的高度經過ILayoutElement.CalculateLayoutInputVertical ,這是自下而上的順序執行,Child會比Parent先計算,這樣在計算Parent時會考慮Child的信息
4. 佈局元素的有效高度經過ILayoutController.SetLayoutVertical ,自上而下的順序執行,Child在Parent後計算,是由於Child的高度分配在於Parent,而後修改RectTransform的新高度
從上面能夠看出自動佈局系統先評估寬度,而後評估高度,所以 高度可能取決於寬度計算,但計算寬度不能依賴於高度。
思考:先計算寬度,再計算有效寬度?
當一個組件的屬性發生改變可致使當前的佈局失效,佈局須要重建,經過調用如下觸發:
LayoutRebuilder.MarkLayoutForRebuild (transform as RectTransform);
重建不會當即生效,會在當前幀結束,在渲染以前生效。不直接生效的緣由是:若是在同一幀有多少重建,會下降性能。
重建應該在如下幾種狀況下被觸發:
In these callbacks: 在下面這些callback函數