UGUI内核大探究
文章平均质量分 87
深入分析UGUI源码,更好的了解UGUI。
凯奥斯
可能是最不会写注释的程序员。
展开
-
UGUI内核大探究(十八)Raycaster
射线其实是属于事件系统,它在EventSystem/Raycasters目录下,有BaseRaycaster、PhysicsRaycaster和Physics2DRaycaster三个类,命名空间也是UnityEngine.EventSystems。但是UI/Core目录下还有一个GraphicRaycaster文件,命名空间却是UnityEngine.UI。当我们在编辑器里新建(或间接新建)一个Canvas时,会为Canvas添加GraphicRaycaster组件,而PhysicsRaycaster和P原创 2016-09-19 22:02:35 · 15181 阅读 · 1 评论 -
UGUI内核大探究(十七)拾遗补缺
IndexedSet是UGUI的内部类(internal class),是一个不会存在相同对象的表,如果有需要的话可以直接复制一份到工程里。ObjectPool是一个对象池,用于回收被释放的对象以达到节省内存的作用。ListPool是ObjectPool的一个特殊应用,在UGUI里经常被用到,用于回收被释放的List。CoroutineTween是一个命名空间(namespace UnityEngine.UI.CoroutineTween),其中有ITweenValue原创 2016-09-19 13:51:08 · 2277 阅读 · 0 评论 -
UGUI内核大探究(十六)InputField
InputField是UGUI的重要组件,可以提供文本输入功能,是与用户交互的一个重要手段。我们可以在编辑器里,为OnValueChanged和OnEndEdit两个事件添加监听,这样就可以获得用户输入的文本。本文就探究一下InputField的实现原理。原创 2016-09-19 09:09:43 · 11477 阅读 · 0 评论 -
UGUI内核大探究(十五)Shadow与Outline
想在Unity3D里为一个图片或者文字添加阴影效果,只需要在该对象上在添加一个Shadow组件。Shadow通过为图像或者文字的Mesh添加顶点来实现阴影效果,而Outline是在对象四角上各添加了一个Shadow。由此我们可以得知,Outline的(额外)消耗是Shadow的四倍,所以还是需要谨慎使用。原创 2016-09-18 22:27:40 · 6552 阅读 · 0 评论 -
UGUI内核大探究(十四)Text
Text是UGUI里非常常用的一个组件,可以根据字符串显示文字。但其实Text的代码并没有很多,因为大部分逻辑是在TextGenerator里实现的,而TextGenerator是UnityEngine命名空间下的类。呃(⊙o⊙)…好吧,乐观一点,至少我们就不需要再为底层的细节而苦恼。原创 2016-09-18 21:54:44 · 7573 阅读 · 0 评论 -
UGUI内核大探究(十三)Dropdown
Dropdown(下拉框)可谓是UGUI的集大成者,在Unity Editor里新建一个Dropdown,会随之附赠Text(Label对象)、Image(Arrow对象)、ScrollRect(Template对象)、Toggle(Template\Viewport\Content\item)和ScrollBar(Template\Scrollbar)。点击运行展开下拉框后还会创建一个Button(Blocker),而且还根据Template再实例化一个可见的Dropdown List。如此复杂的一个组件原创 2016-09-18 09:07:25 · 10182 阅读 · 4 评论 -
UGUI内核大探究(十二)Slider
Slider是UGUI的一个组件,使用它可以实现滑动条,算是一个比较常用的组件,它与ScrollBar(参考UGUI内核大探究(十一)ScrollRect与ScrollBar)有些类似,但又不太相同。本文那就分析一下Slider的原理。原创 2016-09-17 22:32:16 · 5712 阅读 · 0 评论 -
UGUI内核大探究(十一)ScrollRect与ScrollBar
当我们在Unity Editor里创建一个Scroll View的时候含有ScrollRect的对象,它下面还有三个子对象,两个含有ScrollBar组件的子对象是作为滚动条,一个Viewport用于限定显示区域。我们可以为Viewport下面的Content对象添加组件(例如Image)或者子对象。点击运行,我们就可以拖动Scroll View,并且看到里面的内容也跟着在滚动。本文就详细分析一下原创 2016-09-17 21:33:30 · 11282 阅读 · 0 评论 -
UGUI内核大探究(十)Layout与Fitter
UGUI内核大探究(七)Graphic中我们讲到Graphic组件SetLayoutDirty里会通知LayoutRebuilder布局需要重建,那么布局是具体是怎样重建的呢?我们知道UGUI有三种布局组,HorizontalLayoutGroup(水平布局组)、VerticalLayoutGroup(垂直布局组)和GridLayoutGroup(格子布局组),为对象添加某一种布局组,就可以让其子对象按照对应布局方法排列。那么这些LayoutGroup与Graphic又有什么关系呢?本文就带着这些问题就探究原创 2016-09-17 12:29:20 · 5906 阅读 · 0 评论 -
UGUI内核大探究(九)Image与RawImage
Image组件是UGUI里最常用的组件(可能没有之一),我们知道其实还有一个RawImage组件。那么二者的区别是什么呢?之前的文章UGUI内核大探究(八)MaskableGraphic中我们提到过,二者(连同Label)都继承自MaskableGraphic。但是同为图片组件,Image的代码有接近一千行之多,而RawImage只有120行。RawImage顾名思义,未加工的生肉图片,RawImage只为我们提供了修改UV的方法,除此之外都是继承自MaskableGraphic。是一个清纯不做作的组件。原创 2016-09-16 20:56:35 · 39843 阅读 · 2 评论 -
UGUI内核大探究(八)MaskableGraphic
MaskableGraphic是UGUI的核心组件,它继承自Graphic。MaskableGraphic是一个抽象类,它的派生类有RawImage、Image、Text。顾名思义,MaskableGraphic是可遮罩的图像。本文就介绍一下MaskableGraphic的实现原理。原创 2016-09-16 17:25:37 · 17478 阅读 · 1 评论 -
UGUI内核大探究(七)Graphic
Graphic是UGUI的核心组件,负责显示图像。它是一个抽象类,是MaskableGraphic(可遮罩图像)的基类(同样是抽象类),而后者是RawImage、Image和Text的基类。虽然Selectable系列组件与Graphic没有明确的依赖关系,但是在UGUI内核大探究(四)Selectable与Button中,我们讲到Selectable使用Graphic(或Image)来显示状态变化。今天我们就探究一下Graphic的原理。原创 2016-09-15 12:38:47 · 19531 阅读 · 4 评论 -
UGUI内核大探究(六)CanvasUpdateRegistry
CanvasUpdateRegistry(画布更新注册处)是一个单例,它是UGUI与Canvas之间的中介,继承了ICanvasElement接口的组件都可以注册到它,它监听了Canvas即将渲染的事件,并调用已注册组件的Rebuild等方法。原创 2016-09-15 10:52:28 · 7973 阅读 · 1 评论 -
UGUI内核大探究(五)Toggle与ToggleGroup
Toggle(开关)是UGUI的组件,它都继承自Selectable类,也就是说它可以根据鼠标事件转换状态。UGUI内核大探究(四)Selectable与Button里我们讲解了Selectable和Button的实现原理。这篇文章就探究一下Toggle的实现原理。原创 2016-09-14 14:40:47 · 21561 阅读 · 0 评论 -
UGUI内核大探究(四)Selectable与Button
Selectable是UGUI的核心组件,除了最常用的Button,它还是Scrollbar、Dropdown、Slider、Toggle、InputField这些组件的基类。在本文中,我们将分析Selectable和Button的源码,探究二者的实现原理。原创 2016-09-14 09:21:40 · 11252 阅读 · 0 评论 -
UGUI内核大探究(三)输入模块
UGUI内核大探究(一)EventSystem我们探究了事件系统,UGUI内核大探究(二)执行事件中我们介绍了事件是如何执行的。那么事件是如何产生的呢?这就涉及到BaseInputModule、PointerInputModule、StandaloneInputModule、TouchInputModule这些类。今天我们就分析这些源码,探究输入模块的原理。BaseInputModule是一个抽象类,是所有输入模块类的基类。PointerInputModule也是一个抽象类,继承自BaseInputMo原创 2016-09-13 22:45:22 · 7689 阅读 · 1 评论 -
UGUI内核大探究(二)执行事件
UGUI内核大探究(一)EventSystem我们探究了事件系统,其中我们讲到EventSystem可以通过ExecuteEvents这个类来执行事件,那么事件是如何执行的呢?这里涉及到了两个文件EventInterface和ExecuteEvents。原创 2016-09-12 08:42:20 · 6890 阅读 · 1 评论 -
UGUI内核大探究(一)EventSystem
UGUI是Unity3D官方推出的UI系统,为了更好的使用UGUI,我们就需要去了解它。UGUI代码开源,我们可以从bitbucket下载到源码。虽然Unity官方喜欢藏着掖着,例如RectTransform和Canvas系列的源码都放在了UnityEngine里面,但是这并不妨碍我们对已开源的代码进行分析(其实多少也有些妨碍吧。。。)今天我们就探究了一下UGUI的事件系统EventSystem。虽然名字起得很大,但是实际上EventSystem处理和管理的其实是点击、键盘输入、触摸等事件,所以应该原创 2016-09-11 15:31:52 · 20173 阅读 · 6 评论 -
UGUI内核大探究(零)
UGUI是Unity3D官方推出的UI系统,为了更好的使用UGUI,我们就需要去了解它。UGUI代码开源,我们可以从bitbucket下载到源码。原创 2016-10-10 22:31:33 · 10343 阅读 · 11 评论