自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凯奥斯的注释

新作《注释的108种编写技巧》正在创作中……(误)

  • 博客(47)
  • 资源 (4)
  • 收藏
  • 关注

原创 小话设计模式(十)外观模式

外观(Fascade)模式定义一个高级的接口,将子系统里的一组接口整合起来,提供了一个统一的外观。在以下情况下可以考虑使用外观模式:(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互

2016-09-30 13:33:59 1872 5

原创 小话设计模式(九)组合模式

组合(Composite)模式将对象组合成树形结构以表示“部分-整体”的层次结构。这样使得用户对单个对象和组合对象的使用具有一致性。组合模式,听名字你可能比较陌生,但是你很可能是这种模式的用户,它的应用非常广泛,例如IOS里的UIView、Cocos2d-x里的Node以及Unity3d里的Transform都是典型的组合模式。

2016-09-29 21:48:38 2007 8

原创 C#语法小知识(十)反射

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。反射(Reflection)有下列用途:它允许在运行时查看特性(attribute)信息。它允许审查程序集中的各种类型,以及实例化这些类型。它允许调用后期绑定的方法。它允许在运行时创建新类型,然后使用这些类型执行一些任务。

2016-09-28 23:03:48 1606

原创 小话设计模式(八)装饰模式

装饰(Decorator)模式是动态地给一个对象添加一些额外的责任。就增加功能来讲,Decorator模式相比生成子类更加灵活。

2016-09-27 13:27:30 759

原创 小话设计模式(七)桥接模式

桥接(Bridge)模式,又名Handle/Body(未找到权威的中文翻译)模式,它将一个类的抽象部分与它的实现部分分离,使它们都可以独立的变化。

2016-09-26 14:19:24 928 1

原创 小话设计模式(六)适配器模式

适配器(Adapter)又名包装器(Wrapper),将一个类的接口转换成用户希望的另外一个接口,使得原本接口不兼容的类可以一起工作。适配器又分为类适配器和对象适配器,而类适配器的实现需要多重继承,而C#并不支持多重继承,所以本文只讨论对象适配器。

2016-09-26 08:56:52 1029

原创 小话设计模式(五)原型模式

原型(Prototype)模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

2016-09-25 22:55:16 621

原创 C#语法小知识(九)事件

事件是委托的一种特殊形式,通过event修饰符来标识。类或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为发行者,接收(或处理)事件的类称为订阅者。

2016-09-24 06:03:38 1483

原创 C#语法小知识(八)扩展

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像普通方法一样进行调用。 对于用 C#,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

2016-09-23 18:47:34 1397

原创 小话设计模式(四)生成器模式

生成器或者建造者(Builder)模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式一般就是用来构建变形金刚用的,如果非要抽象来讲,那么就是某个类型由不同的部分组成,而这些部分可以独立变化成不同的子类(例如创建迷宫或者组装赛车,再或者孢子)。

2016-09-23 15:00:54 2098

原创 小话设计模式(三)抽象工厂模式

跨移动平台开发App的时候,要根据IOS和Android(或者其他平台)的各自的API来创建统一的接口,因为平台的差异性,往往需要大量的代码来统一。我们常用的跨平台的(游戏)开发工具,例如Cocos2dx和Unity3d,都帮我们实现了部分常用的接口,让我们大部分时候可以忽略平台的差异性。本文并不是要探究他们的实现方法,而是为这种平台差异带来的问题提供一种可行的解决方案——抽象工厂(Abstract Factory)模式。抽象工厂(又名Kit)提供一种创建一系列相关或者相互依赖对象的接口,而无需指定它们

2016-09-22 21:12:09 989

原创 小话设计模式(二)工厂方法模式

工厂方法(Factory Method)由名虚构造器(Virtual Constructor),是一种创建型的设计模式。使用工厂模式的意图便是定义一个用于创建对象的接口,让子类决定实例化哪一个类。它似的一个类的实例化延迟到其子类。

2016-09-21 14:15:30 1005

原创 小话设计模式(一)单例模式

单例模式(Singleton)是一种喜闻乐见非常常用的设计模式。老师说,架构师(或者主程)也说“要面向对象,不能使用全局变量”,那么当我们真的真的很需要使用类似于全局变量的东西的时候该怎么办?单例模式为我们提供了一种解决方案。

2016-09-20 21:56:06 1389

原创 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 15146 1

原创 UGUI内核大探究(十七)拾遗补缺

IndexedSet是UGUI的内部类(internal class),是一个不会存在相同对象的表,如果有需要的话可以直接复制一份到工程里。ObjectPool是一个对象池,用于回收被释放的对象以达到节省内存的作用。ListPool是ObjectPool的一个特殊应用,在UGUI里经常被用到,用于回收被释放的List。CoroutineTween是一个命名空间(namespace UnityEngine.UI.CoroutineTween),其中有ITweenValue

2016-09-19 13:51:08 2267

原创 UGUI内核大探究(十六)InputField

InputField是UGUI的重要组件,可以提供文本输入功能,是与用户交互的一个重要手段。我们可以在编辑器里,为OnValueChanged和OnEndEdit两个事件添加监听,这样就可以获得用户输入的文本。本文就探究一下InputField的实现原理。

2016-09-19 09:09:43 11463

原创 UGUI内核大探究(十五)Shadow与Outline

想在Unity3D里为一个图片或者文字添加阴影效果,只需要在该对象上在添加一个Shadow组件。Shadow通过为图像或者文字的Mesh添加顶点来实现阴影效果,而Outline是在对象四角上各添加了一个Shadow。由此我们可以得知,Outline的(额外)消耗是Shadow的四倍,所以还是需要谨慎使用。

2016-09-18 22:27:40 6526

原创 UGUI内核大探究(十四)Text

Text是UGUI里非常常用的一个组件,可以根据字符串显示文字。但其实Text的代码并没有很多,因为大部分逻辑是在TextGenerator里实现的,而TextGenerator是UnityEngine命名空间下的类。呃(⊙o⊙)…好吧,乐观一点,至少我们就不需要再为底层的细节而苦恼。

2016-09-18 21:54:44 7553

原创 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 10169 4

原创 UGUI内核大探究(十二)Slider

Slider是UGUI的一个组件,使用它可以实现滑动条,算是一个比较常用的组件,它与ScrollBar(参考UGUI内核大探究(十一)ScrollRect与ScrollBar)有些类似,但又不太相同。本文那就分析一下Slider的原理。

2016-09-17 22:32:16 5697

原创 UGUI内核大探究(十一)ScrollRect与ScrollBar

当我们在Unity Editor里创建一个Scroll View的时候含有ScrollRect的对象,它下面还有三个子对象,两个含有ScrollBar组件的子对象是作为滚动条,一个Viewport用于限定显示区域。我们可以为Viewport下面的Content对象添加组件(例如Image)或者子对象。点击运行,我们就可以拖动Scroll View,并且看到里面的内容也跟着在滚动。本文就详细分析一下

2016-09-17 21:33:30 11261

原创 UGUI内核大探究(十)Layout与Fitter

UGUI内核大探究(七)Graphic中我们讲到Graphic组件SetLayoutDirty里会通知LayoutRebuilder布局需要重建,那么布局是具体是怎样重建的呢?我们知道UGUI有三种布局组,HorizontalLayoutGroup(水平布局组)、VerticalLayoutGroup(垂直布局组)和GridLayoutGroup(格子布局组),为对象添加某一种布局组,就可以让其子对象按照对应布局方法排列。那么这些LayoutGroup与Graphic又有什么关系呢?本文就带着这些问题就探究

2016-09-17 12:29:20 5882

原创 UGUI内核大探究(九)Image与RawImage

Image组件是UGUI里最常用的组件(可能没有之一),我们知道其实还有一个RawImage组件。那么二者的区别是什么呢?之前的文章UGUI内核大探究(八)MaskableGraphic中我们提到过,二者(连同Label)都继承自MaskableGraphic。但是同为图片组件,Image的代码有接近一千行之多,而RawImage只有120行。RawImage顾名思义,未加工的生肉图片,RawImage只为我们提供了修改UV的方法,除此之外都是继承自MaskableGraphic。是一个清纯不做作的组件。

2016-09-16 20:56:35 39663 2

原创 UGUI内核大探究(八)MaskableGraphic

MaskableGraphic是UGUI的核心组件,它继承自Graphic。MaskableGraphic是一个抽象类,它的派生类有RawImage、Image、Text。顾名思义,MaskableGraphic是可遮罩的图像。本文就介绍一下MaskableGraphic的实现原理。

2016-09-16 17:25:37 17412 1

原创 C#语法小知识(七)特性

特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。特性具有以下属性:特性可向程序中添加元数据。元数据是有关在程序中定义的类型的信息。所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。可以添加自定义特性,以指定所需的任何附加信息。

2016-09-15 22:39:42 2212

原创 UGUI内核大探究(七)Graphic

Graphic是UGUI的核心组件,负责显示图像。它是一个抽象类,是MaskableGraphic(可遮罩图像)的基类(同样是抽象类),而后者是RawImage、Image和Text的基类。虽然Selectable系列组件与Graphic没有明确的依赖关系,但是在UGUI内核大探究(四)Selectable与Button中,我们讲到Selectable使用Graphic(或Image)来显示状态变化。今天我们就探究一下Graphic的原理。

2016-09-15 12:38:47 19483 4

原创 UGUI内核大探究(六)CanvasUpdateRegistry

CanvasUpdateRegistry(画布更新注册处)是一个单例,它是UGUI与Canvas之间的中介,继承了ICanvasElement接口的组件都可以注册到它,它监听了Canvas即将渲染的事件,并调用已注册组件的Rebuild等方法。

2016-09-15 10:52:28 7949 1

原创 UGUI内核大探究(五)Toggle与ToggleGroup

Toggle(开关)是UGUI的组件,它都继承自Selectable类,也就是说它可以根据鼠标事件转换状态。UGUI内核大探究(四)Selectable与Button里我们讲解了Selectable和Button的实现原理。这篇文章就探究一下Toggle的实现原理。

2016-09-14 14:40:47 21514

原创 UGUI内核大探究(四)Selectable与Button

Selectable是UGUI的核心组件,除了最常用的Button,它还是Scrollbar、Dropdown、Slider、Toggle、InputField这些组件的基类。在本文中,我们将分析Selectable和Button的源码,探究二者的实现原理。

2016-09-14 09:21:40 11208

原创 UGUI内核大探究(三)输入模块

UGUI内核大探究(一)EventSystem我们探究了事件系统,UGUI内核大探究(二)执行事件中我们介绍了事件是如何执行的。那么事件是如何产生的呢?这就涉及到BaseInputModule、PointerInputModule、StandaloneInputModule、TouchInputModule这些类。今天我们就分析这些源码,探究输入模块的原理。BaseInputModule是一个抽象类,是所有输入模块类的基类。PointerInputModule也是一个抽象类,继承自BaseInputMo

2016-09-13 22:45:22 7666 1

原创 C#语法小知识(六)属性与索引器

属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。

2016-09-13 14:54:31 7011

原创 小话设计模式(零)设计模式可以满足你对编程的所有幻想(误)

什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结为什么使用设计模式?使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。上面被划掉的是我从百度百科设计模式中直接复制粘贴过来的。既然划掉了,那么就说一下我的理解。设计模式是编程过程中的一种中间层面的技巧或者经验(微观层面的如算法、数据结构、语法,宏观层面的如框架、工具箱、系统架构)。编程其实很简单,会写“Hello world”就是会编程了,会使用if和for语句

2016-09-12 23:56:34 1862 5

原创 UGUI内核大探究(二)执行事件

UGUI内核大探究(一)EventSystem我们探究了事件系统,其中我们讲到EventSystem可以通过ExecuteEvents这个类来执行事件,那么事件是如何执行的呢?这里涉及到了两个文件EventInterface和ExecuteEvents。

2016-09-12 08:42:20 6880 1

原创 手游行业展望

手游行业经历了前两年的疯狂扩张,现在已经进入收缩阶段,发展形势放缓。作为手游行业从业人员,不了解行情只是闭门造车,恐怕很难做到出门合辙。本文就对手游行业未来的发展进行展望。1、3D是大趋势2、大IP时代的到来3、平台效应4、大公司的制霸

2016-09-11 18:31:34 1918 1

原创 Untiy3D开发小贴士(一)OnEnabled与OnDisabled

设某个组件为NewBehaviourOnEnabled被调用的情况:1、GameObject添加组件的时候,即AddComponetNewBehaviour> ;2、包含NewBehaviour的Prefab被实例化的时候;3、已添加NewBehaviour的GameObject由未激活到已激活的时候,即setActive(true) ;4、NewBehaviour由不可用

2016-09-11 15:48:45 8503

原创 UGUI内核大探究(一)EventSystem

UGUI是Unity3D官方推出的UI系统,为了更好的使用UGUI,我们就需要去了解它。UGUI代码开源,我们可以从bitbucket下载到源码。虽然Unity官方喜欢藏着掖着,例如RectTransform和Canvas系列的源码都放在了UnityEngine里面,但是这并不妨碍我们对已开源的代码进行分析(其实多少也有些妨碍吧。。。)今天我们就探究了一下UGUI的事件系统EventSystem。虽然名字起得很大,但是实际上EventSystem处理和管理的其实是点击、键盘输入、触摸等事件,所以应该

2016-09-11 15:31:52 20121 6

原创 C#语法小知识(五)接口interface

接口具有下列属性:接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。不能直接实例化接口。接口可以包含事件、索引器、方法和属性。接口不包含方法的实现。类和结构可从多个接口继承。接口自身可从多个接口继承。

2016-09-10 22:39:24 2800

原创 Unity3D Mesh小课堂(五)CombineMeshes合并网格

合并网格可以提升性能,而且也可以让我们更好更灵活的管理模型。有些时候我们会希望多个模型使用同一个Collider,但是我们显然不能让美术再给我们专门为碰撞做模型来。因为他们可能会有不同的组合,或者跟其他的物体进行组合,如果每种组合都做一个碰撞模型的话,美术大人会砍死我们的,而且这样也不利于维护(调整一下坐标,这个碰撞模型就得重做)。本文介绍了一个简单的合并网格的方法。

2016-09-09 23:40:59 26131 13

原创 C#语法小知识(四)委托delegate

delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。 有关委托的应用,请参见委托和泛型委托。这里我们就介绍一下委托的几种用法。

2016-09-09 13:55:11 6808

原创 C#语法小知识(三)枚举类型enum

枚举类型声明一系列常数,用于表示这个类型的变量可能会在这些常数里变化。本文讲解了枚举类型的几种用法。

2016-09-08 22:19:37 8041

BunnyLOD demo

A Simple, Fast, and Effective Polygon Reduction Algorithm

2018-10-18

Unity3D合并Mesh

在Unity3D里合并Mesh,参考博客http://blog.csdn.net/ecidevilin/article/details/52490960

2016-09-12

绘制圆形/圆环/扇形/扇面Mesh

在Unity3D里绘制圆形/圆环/扇形/扇面Mesh

2016-09-07

三角形Mesh绘制

在Unity3D里绘制一个简单的三角形Mesh

2016-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除