UGUI源码(二)

CanvasUpdateSystem

下图转自:https://blog.csdn.net/qq_28820675/article/details/105746002

CanvcasUpdateRegistry在构造函数中将PerformUpdate方法注册进Canvas的willRenderCanvas中,Canvas在渲染前会调用willRenderCanvases,即执行PerformUpdate。

CanvasUpdateRegistry维护了两个索引集(不会存放相同的元素):布局重建队列和图像重建队列

 通过RegisterCanvasElementForLayoutRebuild(ICanvasElement element)添加到布局重建队列

通过RegisterCanvasElementForGraphicRebuild(ICanvasElement element)添加到图像重建队列

移除:

CanvasUpdate:

 除了最后一个枚举项,其他五个项分别代表了布局的三个阶段和渲染的两个阶段。

PerformUpdate:

1.从两个序列中删除不可用的元素

2.对布局重建队列依据父对象数量进行排序

3.分别以PreLayout,Layout,PostLayout的参数顺序调用每一个元素的Rebuild方法

4.调用所有元素的的LayoutComplete(布局重建完成),并清空布局重建队列

5.布局更新结束

6.以PreRender,LaePreRender的参数顺序调用每一个元素的Rebuild方法

7.调用所有元素的GraphicUpdateComplete(图形重建完成),并清空图形重建队列

8.图形更新结束

脏标记:

一般UI组件在监听函数(例如:OnRectTransformDimensionsChange(实现UIBehaviour))中添加脏标记,并添加到重建队列中。

Graphic中的三种脏标记:

原文地址:https://www.cnblogs.com/mcyushao/p/13937596.html