UGUI源码(三)
LayoutRebuilder
图片转自:https://blog.csdn.net/qq_28820675/article/details/106245195
参考:https://blog.csdn.net/qq826364410/article/details/88141753
Graphic的Layout是通过LayoutRebuilder.MarkLayoutForRebuild方法来标记重建的。
MarkLayoutRebuild:
1.找到父对象中最近的ILayoutGroup组件layoutRoot。
2.从LayoutRebuilder对象池中Pop出一个LayoutRebuilder并用layoutRoot初始化。
3.如果创建的LayoutRebuilder已经在CanvasUpdateRegistry的布局重建队列中,就更新,否则就加入。
LayoutRebuilder继承了ICanvasElement,在重建时遍历CanvasUpdateRegistry的重建队列,调用Rebuild方法。
ReBuild:实现了ICanvasElement的ReBuild方法
PerformLayoutCalculation:参数:(layoutRoot,回调函数计算布局)
以layoutRoot的子对象为参数递归调用该方法,先计算子对象布局,然后计算父对象布局,父对象的布局计算需要依赖子对象的大小(比如ContentSizeFitter)
PerformLayoutControl:参数:(layoutRoot,回调函数计算布局)
1.在layoutRoot上获取所有ILayoutController类型的组件
2.先处理组件中为ILayoutSelfController类型的情况,也就是先处理本身的RectTransform大小设置
3.然后处理组件中不是ILayoutSelfController了性的情况,处理比如子对象的布局组(LayoutGroup)的RectTransform大小设置。
4.然后以m_ToRebuild的子对象为参数,递归调用PerformLayoutControl方法,处理子对象本身的RectTransform大小和子对象的子对象的RectTransform大小。
【推荐】国内首个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工具开发(转)