unity UGUI部分源码简析

事件系统:
StandaloneInputModule:继承自PointerInputModule,实现了一个Process虚方法,用于处理键盘鼠标的输入事件;

TouchInputModule:继承自PointerInputModule,实现了一个Process虚方法,用于处理触摸屏的输入事件;

Eventsystem:单例,维护了一个BaseInputModule的list,每帧遍历,用于更新输入模块,并执行当前模块的Process;

ExecuteEvents:静态,有一个Execute泛型方法,在上述Process中执行,使当前的组件响应输入事件;

渲染系统:

CanvasUpdateRegistry:
画布更新注册处,单例,继承ICanvasElement接口的组件均可以注册到它,在Canvas即将渲染时调用Rebuild方法;
主要在Graphic中调用,包括一个布局重建队列(m_LayoutRebuildQueue),一个图像重建队列(m_GraphicRebuildQueue);

Graphic:
抽象类,继承自ICanvasElement,重写Rebuild,用于更新网格(UpdateGeometry)和材质(UpdateMaterial),UpdateGeometry,UpdateMaterial均为虚方法,一般的组件如image,text均继承自graphic,并重写UpdateGeometry,UpdateMaterial;
graphic还继承UIBehaviour,在发生OnRectTransformDimensionsChange等变化时实现了对布局(SetLayoutDirty),网格(SetVerticesDirty),材质(SetMaterialDirty)的修改;其中SetVerticesDirty,SetMaterialDirty直接注册CanvasUpdateRegistry的m_GraphicRebuildQueue,
SetLayoutDirty通过LayoutRebuilder注册CanvasUpdateRegistry的m_LayoutRebuildQueue;

LayoutRebuilder:
主要在Graphic中调用,用于搜索影响Graphic组件的布局控件,并根据布局控件调整组件大小,继承ICanvasElement,重写Rebuild方法,在CanvasUpdateRegistry调用;

MarkLayoutForRebuild:
开放接口,在Graphic的SetLayoutDirty中调用,用于搜索布局控件(继承ILayoutGroup接口,GripLayoutGroup等),通过该控件初始化一个LayoutRebuilder,并注册到CanvasUpdateRegistry中);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值