LayoutRebuilder
图片转自:https://blog.csdn.net/qq_28820675/article/details/106245195
参考:https://blog.csdn.net/qq826364410/article/details/88141753
Graphic的Layout是通过LayoutRebuilder.MarkLayoutRebuild方法来标记重建的。
MarkLayoutRebuild:
1.找到父对象中最近的ILayoutGroup组件layoutRoot。
2.从LayoutRebuilder对象池中Pop出一个LayoutRebuilder并用layoutRoot初始化。
3.如果创建的LayoutRebuilder已经在CanvasUpdateRegistry的布局重建队列中,就更新,否则就加入。
LayoutRebuilder继承了ICanvasElement,在重建时遍历CanvasUpdateRegistry的重建队列,调用Rebuild方法。
ReBuild:实现了ICanvasElement的ReBuild方法
PerformLayoutCalculation:参数:(layoutRoot,回调函数计算布局)
以layoutRoot的子对象为参数递归调用该方法,先计算子对象布局,然后计算父对象布局,父对象的布局计算需要依赖子对象的大小(比如ContentSizeFitter)
PerformLayoutControl:参数:(layoutRoot,回调函数计算布局)
1.在layoutRoot上获取所有ILayoutController类型的组件
2.先处理组件中为ILayoutSelfController类型的情况,也就是先处理本身的RectTransform大小设置
3.然后处理组件中不是ILayoutSelfController了性的情况,处理比如子对象的布局组(LayoutGroup)的RectTransform大小设置。
4.然后以m_ToRebuild的子对象为参数,递归调用PerformLayoutControl方法,处理子对象本身的RectTransform大小和子对象的子对象的RectTransform大小。