以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函数