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

 

posted @   mc宇少  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2019-11-06 unity工具开发(转)
点击右上角即可分享
微信分享提示