UGUI Manual

以Unity 5.5 的官方文檔爲例html

Canvas

UI元素的先後順序:SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex函數

BasicLayout

文檔:https://docs.unity3d.com/Manual/UIBasicLayout.html佈局

使用Anchor時,能夠是相對於父節點的,好比Anchor在Left,四個三角形是在左邊的性能

image

image

佈局元素(LayoutElement)

LayoutElement 不直接修改元素的size,但提供信息供Layout Controllerui

一個gameobject上綁定了Rect Transform就能夠稱爲LayoutElementspa

Image和Text 在屬性面板提供了Preferred width和 height3d

能夠添加Layout Element組件來重寫Min ,Preferred ,Flexible sizecode

image

佈局控制(Layout Controller)

文檔:https://docs.unity3d.com/Manual/UIAutoLayout.htmlorm

Layout Element 在 Layout group 的size 遵尋如下的原則:htm

  • 首先 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
相關文章
相關標籤/搜索