UGUI源码分析:系统总结UGUI的全部内容

序言

嗨,我是Vin129,一名Unity客户端游戏开发者。UGUI应该算Unity客户端开发者们经常接触的东西了,所以该系列文章主旨在于加深对UGUI的了解,深入理解其组件实现原理,以便在日常使用中更加得心应手。其次,多读读源码也是一种成长:)
本系列文章到此已经完结啦!历时一个半月的时间,花费了30+个小时,Markdown记录了17000+内容(有许多代码),这仅仅是自己使用的部分。发布文章,在润色整理并能很好的呈现出来重要的东西,反复推敲,我觉得这上面可能花费的时间要更多。不过分享文章这也是我的初衷之一,对我是一种锻炼,也希望我的文章对你能有所帮助:)


系列图例

总览图

事件系统

UGUI源码分析:系统总结UGUI的全部内容_第1张图片

刷新系统


概括

记忆是会衰退的,在我发现一个月前我阅读的部分源码内容我已经模糊了的时候,我开始体会到了。
当时我就打算再系列文章结束之后要回顾一遍,并用一句话去将每个组件的关键点给描述出来。以下就是回顾与描述,这就像是关键Key,想到了Key也许就能把里面的内容给提前出来了呢


EventSystem
帧刷新检测与响应输入事件系统。


CanvasUpdateSystem
Canvas主导的刷新系统,更新Mesh、Material、Layout注册方式:脏标记


LayoutSystem
LayoutSystem:LayoutGroup(HorizontalOrVerticalLayoutGroup)
LayoutSystem:GridLayoutGroup,ContentSizeFitter

CanvasUpdateSystem中的Layout部分系统,布局ILayoutElement物体,布局主要依靠RectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge edge, float inset, float size),主要计算: 轴、 距轴距离、 物体尺寸


Graphic
图像组件基类,主要对 网格Mesh、材质Material 进行了统一处理,一套完整的流程


MaskableGraphic,RectMask2D,Mask
继Graphic的材质处理,提供了两种遮罩处理模式。RectMask2d是通过CanvasRenderer.EnableRectClipping设置裁剪区域Mask是通过创建新的材质


Image&RawImage
继Graphic的网格处理,主要丰富其网格处理的内容。主要关注OnPopulateMesh方法。


Text&Shadow&Outline
FontData中包含所有关于Text的设置数据,Text主要在于网格处理,根据文字内容生成对应网格
Shadow&Outline 属于网格特效,实现都是丰富顶点数据,使其生成多份网格来模仿阴影效果


Selectable
交互组件基类,重点实现导航功能与交互过渡功能,方便子类组件使用。


Button
点击事件组件,事件中最基础的组件,该篇文章中以Button为例完整的分析了事件响应的过程。


Toggle&ToggleGroup
开关组件,ToggleGroup控制Toggle,绑定ToggleGroup的Toggle值改变时会调动ToggleGroup来处理。


Slider
滑动条,通过点击拖拽改变HandleRect位置计算value值


Scrollbar&ScrollRect
滑动列表,拖拽与Scrollbar来实现滑动功能,计算中使用了Bounds。


Dropdown
下拉列表,属于混合组件,使用了Toggle、ScrollRect,自身主要在于创建列表模板Template,并更具Item数量进行适当尺寸调整。


InputField
文本输入,主要是更具设置数据对输入文本进行处理,并借助TouchScreenKeyboard调用键盘模块。


以上一句话概括内容,大致概括了每个组件每个模块的重要功能。当然,每个组件还包含了其他值得被阅读学习的内容,文章中介绍的内容有限,还是希望想要深入了解UGUI的朋友们可以自行下载源码进行阅读。希望我的文章可以对你的阅读带来一些帮助:)
该系列使用的UGUI版本:2017.4 :源码地址


.
.
.
.
.


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


你可能感兴趣的:(UGUI源码分析)