UGUI源码解析——LayoutGroup

Posted Hello Bug.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI源码解析——LayoutGroup相关的知识,希望对你有一定的参考价值。

一:前言

LayoutGroup是控制子布局组件的基类,实现了ILayoutElement和ILayoutGroup接口,说明它既是一个布局元素也是一个布局控制器


二:源码解析

——CalculateLayoutInputHorizontal

实现了CalculateLayoutInputHorizontal方法,计算需要被布局系统所控制的所有物体(判断物体身上的实现了ILayoutIgnorer的组件上的ignoreLayout是否为true)


——GetStartOffset

根据给定轴(axis)和对齐方式(childAlignment)计算出第一个元素的起始偏移坐标,由子类调用


——SetChildAlongAxis、SetChildAlongAxisWithScale

通用的设置元素坐标的方法,由子类调用


——SetLayoutInputForAxis

设置minWidth、preferredWidth、flexibleWidth、minHeight、preferredHeight、flexibleHeight属性值的方法,由子类调用


——SetDirty

SetDirty调用了LayoutRebuilder.MarkLayoutForRebuild方法,此方法内部其实是调用了CanvasUpdateRegistry类中的InternalRegisterCanvasElementForLayoutRebuild方法将元素添加到了布局重建的序列中
需要注意的是如果当前正在进行布局重建,则延迟一帧执行,这也解释了为什么在挂载了布局组件的物体下动态创建元素时立即获取位置信息是不正确的,因为他在下一帧才会更新布局,可以使用下面这个方法强制更新布局

LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);

以上是关于UGUI源码解析——LayoutGroup的主要内容,如果未能解决你的问题,请参考以下文章

UGUI源码解析——HorizontalOrVerticalLayoutGroup

UGUI源码解析——HorizontalOrVerticalLayoutGroup

UGUI源码解析——HorizontalLayoutGroupVerticalLayoutGroupGridLayoutGroup

Unity笔记UGUI的自动布局功能

UGUI源码解析——ContentSizeFitter

UGUI源码解析——IClippable