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中);

猜你喜欢

转载自blog.csdn.net/dark00800/article/details/78900763