(六)Graphic与MaskableGraphic详解

1.前言

此篇将对UGUI系统中图像显示的核心Graphic类进行详细分析

2.重点方法分析

基本流程已经在CanvasUpdate一文中的2.1和2.2节分析过了。即每帧在进行Canvas渲染前通过CanvasRenderer更新mesh和材质等信息,渲染时根据这些信息进行相应渲染。所以UI渲染的基本模块是Canvas。本文对一些核心方法进行详解。

2.1 GraphicRegistry

此类有别与GraphicUpdateRegistry,一个只是纯粹用来存储本Canvas下Graphic对象。另一个则是用来更新Canvas,设置Canvas的渲染问题。GraphicReigstry目前只在射线检测中(GraphicRaycaster)使用,即用来获取特定Canvas下的Graphic列表。

2.2 标记Graphic重建

标记Graphic重建是通过SetMaterialDirty和SetMeshDirty来标记的。两者均是与Graphic渲染相关的。Layout布局重建相关的则是SetLayoutDirty来标记的。

2.2 材质Material

材质分为三个默认材质、材质和渲染材质。优先使用渲染材质,如果没有mask组件则渲染材质和材质相同,最后是默认材质。如果没有指定材质,则使用默认材质。

默认材质:defaultGraphicMaterial是最备选方案,备胎材质。
材质:material是指定的材质,一般情况下使用的是此材质。
渲染材质:materialForRendering一般情况下此材质与material相同,如果存在Mask或者继承IMaterialModifier的组件,则会进行材质修改以达到遮罩的效果。

2.3 重构Rebuild

Rebuild是Graphic的核心,即通过Rebuild来实现材质、网格等的修改,其流程如下:
1)剔除,如果CanvasRenderer.cull,则直接退出。
2)如果标记几何(mesh)更新,则进行网格更新(DoMeshGeneration),通过OnPopulateMesh来更新mesh,这也是自定义网格时经常用到的。可以自定义组件继承Graphic,然后重写OnPopulateMesh来自定义网格形状,结合VertexHelper可进行UIMesh的各种样式定制,比如游戏角色的属性图、饼状图、柱状图以及各种函数曲线。
3)如果标记材质更新,则更新Material以及贴图等信息。

2.3.1几种OnPopulateMesh

1)Graphic默认方法

        protected virtual void OnPopulateMesh(VertexHelper vh)
        {
   
            var r = GetPixelAdjustedRect();
            var v = new Vector4(r.x, r.y, r.x + r.width, r.y + r.height);

            Color32 color32 = color;
            vh.Clear()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值