【Unity/笔记】UGUI基础原理

本文详细解析Unity的UGUI系统中批处理和重建的过程。 Graphic类作为UI图形功能的基础,由CanvasRenderer与RectTransform支持。Layout组件控制 RectTransform 的尺寸和位置,独立于Graphic类。批处理涉及Canvas的重新批处理,受CanvasUpdateRegistry跟踪,关键在于减少Draw Call。子画布Sub-canvas能隔离脏节点,优化渲染。重建过程主要在CanvasUpdateRegistry的PerformUpdate方法中进行,包括Layout和Graphic的分阶段重建。理解这些原理有助于优化UI性能。
摘要由CSDN通过智能技术生成
UGUI基础原理

  • Graphic[图形]
    [RequireComponent(typeof(CanvasRenderer))]
    [RequireComponent(typeof(RectTransform))]

    [Graphic][2]类是由Unity UI系统的C#库提供的基类,所有的向画布系统提供可绘制几何内容的UI系统C#类都继承它。
    大多数内置的UI系统绘图类都是通过 MaskableGraphic 子类实现的,这个子类实现了 IMaskable 接口,可以被遮罩。
    Drawable类的主要子类是 Image 和 Text ,它们能提供与其名称相对应的内容。

    1. Graphic是UGUI的图形功能基类,它必须依赖CanvasRenderer与RectTransform 组件运行。
    2. 内置UI系统通过MaskableGraphic实现,使用了IMaskabel接口,可被遮罩。
    3. Text何Image都继承自MaskableGraphic, ILayoutElement(及其他)
  • Layout[布局]
    [RequireComponent(typeof(RectTransform))]

    Layout组件(如ScrollRect)控制RectTransform的尺寸和位置,它通常用于创建具有复杂布局并且内部组件需要相对尺寸或者相对位置的UI。
    Layout组件只依赖RectTransform并且只影响与其关联的RectTransform的属性。他们不依赖Graphic类,并且可以独立于UI系统的Graphic类使用。

    1. 用于控制内部组件相对尺寸和相对位置,只依赖RectTransform,可独立与Graphic类使用,例如排布子类中空的GameObject的位置

    说明:

    Graphic标记脏画布时重建时会调用[CanvasUpdateRegistry][1] 类中的RegisterCanvasElementForGraphicRebuild
    Layout组件则调用[CanvasUpdateRegistry][1]中的RegisterCanvasElementForLayoutRebuild
    这个类跟踪那些需要进行更新的Layout组件和Graphic组件集合,并在与其相关的画布调用 willRenderCanvases 事件时根据需要触发PerformUpdate进行更新。
    Layout和Graphic组件的更新称为 重建(rebuild)

    1. rebuild的底层与[CanvasUpdateRegistry][1]有关,因此图形UI和RectTransform的变化都会(且主要是因此)引起rebuild。
    2. willRenderCanvases方法是查看UI性能的重要指标。
  • Canvas[画布]

    画布(Canvas) 是以原生代码编写的Unity组件,画布负责将其内部的几何形状合并到批处理、生成合适的渲染指令并发送到Unity图形系统。这些操作都由原生C++代码完成,这被称为 重新批处理(rebatch) 或 批处理构建(batch build) 。当一个画布被标记为含有需要重新批处理的几何形状时,称这个画布为 脏画布。
    这个canvas其实在UGUI里面重要的作用就是生成UI组件,然后生成command命令,然后传递到GPU,最后由GPU把它们画出来,完成的是这么一个过程。在生成UI组件的过程当中,也包括了布局,就是哪些UI显示在哪个位置&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值