以Unity 5.5 的官方檔案為例
Canvas
UI元素的前后順序:SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex
BasicLayout
檔案:https://docs.unity3d.com/Manual/UIBasicLayout.html
使用Anchor時,可以是相對于父節點的,比如Anchor在Left,四個三角形是在左邊的


布局元素(LayoutElement)
LayoutElement 不直接修改元素的size,但提供資訊供Layout Controller
一個gameobject上系結了Rect Transform就可以稱為LayoutElement
Image和Text 在屬性面板提供了Preferred width和 height
可以添加Layout Element組件來重寫Min ,Preferred ,Flexible size

布局控制(Layout Controller)
檔案:https://docs.unity3d.com/Manual/UIAutoLayout.html
Layout Element 在 Layout group 的size 遵尋以下的原則:
- 首先 Min Size被分配
- 如果有足夠的空間,Preferred Size(優先尺寸)會被分配
- 如果有多余的空間,Flexible Size (彈性、靈活尺寸)會被分配
那些是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 setters for properties that can change the layout.
In these callbacks: 在下面這些callback函式
- OnEnable
- OnDisable
- OnRectTransformDimensionsChange
- OnValidate (only needed in the editor, not at runtime)
- OnDidApplyAnimationProperties
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6738.html
標籤:其他
上一篇:拓展歐幾里得求 ax + by = c的通解(a >=0, b >= 0)
下一篇:資料鎖和出佇列的一個例子
