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
相关文章
相关标签/搜索