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中的三种脏标记:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-11-06 unity工具开发(转)