UGUI源码解析——LayoutRebuilder

Posted Hello Bug.

tags:

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

一:前言

LayoutRebuilder类主要负责布局的刷新(UI对象位置和大小的刷新)


二:源码解析

——MarkLayoutForRebuild

此方法是外界与布局系统沟通的桥梁,在Graphic、GridLayoutGroup等类中都调用了此方法
首先向上遍历找到最上层父物体中挂载了实现ILayoutGroup的组件的对象,之后调用MarkLayoutRootForRebuild将此对象添加到CanvasUpdateRegistry类中的布局重建序列中


——Rebuild

在CanvasUpdateRegistry类中给委托Canvas.willRenderCanvases注册了PerformUpdate方法,PerformUpdate会在CanvasRender渲染之前会遍历布局和图像重建序列调用每个元素的Rebuild方法(执行布局重建操作前会先将所有待重建对象的父物体数量进行升序排序,这样可以保证是从下到上进行布局重建,避免布局混乱),这里的Rebuild就是布局更新操作的具体实现
先进行水平布局的计算和设置再进行竖直布局的计算和设置,


——PerformLayoutCalculation

递归地从下到上遍历实现了ILayoutElement接口的组件的对象,并调用计算布局属性的方法(CalculateLayoutInputHorizontal和CalculateLayoutInputVertical)。从下到上计算是因为父对象的属性依赖于子对象的属性


——PerformLayoutControl

从上到下遍历实现了ILayoutController接口的组件的对象,先处理实现了ILayoutController接口的组件的对象,接着处理实现了ILayoutGroup接口的组件的对象,最后迭代遍历当前对象的子物体。从上到下设置是因为子对象的布局依赖于父对象的布局

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

UGUI源码解析——ICanvasElement

UGUI源码解析——ICanvasElement

UGUI源码解析——总览

UGUI源码解析——IMeshModifier

UGUI源码解析——LayoutUtility

UGUI源码解析——Graphic