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大小。

 

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