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中的三种脏标记: