美文网首页
UGUI源码分析:CanvasUpdateSystem 画布刷新

UGUI源码分析:CanvasUpdateSystem 画布刷新

作者: Vin129_ | 来源:发表于2020-05-31 17:26 被阅读0次

    系列

    UGUI源码分析系列总览

    CanvasUpdateSystem

    Related Class: Canvas、CanvasUpdateRegistry、ClipperRegistry

    Related Interface: ICanvasElement

    Related Other: Enum CanvasUpdate

    Intro: 由Canvas控制,通过 ICanvasElement 接口,使用脏标记方法来统一更新CanvasElement

    在这里插入图片描述

    ICanvasElement

    • 重建方法:void Rebuild(CanvasUpdate executing);
    • 布局重建完成:void LayoutComplete();
    • 图像重建完成:void GraphicUpdateComplete();
    • 检查Element是否无效:bool IsDestroyed();

    PerformUpdate

    Registry 管理着两个队列

    1. LayoutRebuildQueue:布局重建
    2. GraphicRebuildQueue:图像重建

    CanvasUpdateRegistry 被初始化时(构造函数)向Canvas中注册了更新函数(PerformUpdate),以用来响应重建。

    Canvas.willRenderCanvases += PerformUpdate;
    

    Canvas在渲染前会调用willRenderCanvases,即执行PerformUpdate ,流程如下:

    • 首先更新布局,根据父节点多少排序,由内向外更新。更新类型依次为 Prelayout 、Layout 、PostLayout(enum CanvasUpdate)
    • 通知布局完成
    • ClipperRegistry 进行剪裁
    • 更新图像,依次 PreRender、LatePreRender、MaxUpdateValue
    • 通知图像更新完成

    脏标记

    标记延迟执行,优化重新渲染的手段。
    详情请见:游戏设计模式:脏标识模式

    例如在Graphic 中存在三种脏标分别代表三种等待重建

    1. 尺寸改变时(RectTransformDimensions):LayoutRebuild 布局重建
    2. 尺寸、颜色改变时:Vertices to GraphicRebuild 图像重建
    3. 材质改变时:Material to GraphicRebuild 图像重建

    层级改变、应用动画属性(DidApplyAnimationProperties) :All to Rebuild 重建所有


    .
    .
    .
    .
    .


    嗨,我是作者Vin129,逐儿时之梦正在游戏制作的技术海洋中漂泊。知道的越多,不知道的也越多。希望我的文章对你有所帮助:)


    相关文章

      网友评论

          本文标题:UGUI源码分析:CanvasUpdateSystem 画布刷新

          本文链接:https://www.haomeiwen.com/subject/nbrrzhtx.html