Unity设计模式

Unity教程之-Unity3d中基于订阅者模式实现事件机制

我们知道通过在Unity3D中通过GetComponent就可以获得某个模块的实例,进而引用这个实例完成相关任务的调用。可是显然这种方法,就像我们随身带着现金去和不同的人进行交易,每次交易的时候都需要我们考虑现金的支入和支出问题,从安全性和耦合度两个方面进行考虑,这种方法在面对复杂的系统设计的时候,非常容易造成模块间的相互依赖,即会增加不同模块间的耦合度。为了解决这个问题,大家开始考虑单例模式,因为单例模式能够保证在全局内有一个唯一的实例,所以这种方式可以有效地降低模块间的直接引用。单例模式就像是我们在银行内办理了一个唯一的账户,这样我们在交易的时候只需要通过这个账户来进行控制资金的流向就可以了。单例模式确保了各个模块间的独立性,可是单例模式更多的是一种主动行为,即我们在需要的时候主动去调用这个模块,单例模式存在的问题是无法解决被调用方的反馈问题,除非被调用方主动地去调用调用方的模块实例。说到这里我们好像看到了一种新的模式,这就是我们下面要提到的事件机制。 More

Unity教程之-Unity游戏技能Skill系统架构设计

 

我想把技能做的比较牛逼,所以项目一开始我就在思考,是否需要一个灵活自由的技能系统架构设计,传统的技能设计,做法都是填excel表,技能需要什么,都填表里,很死板,比如有的技能只需要1个特效,有的要10个,那么表格也得预留10个特效的字段.在代码里面也是写死一些东西,要增加和修改,就得改核心代码,如果我要把核心部分做成库封装起来,就很麻烦了.

能不能做成数据驱动的方式呢?

改技能文件就行了,即使要增加功能,也只需要扩展外部代码,而不用改核心代码,

我是这么来抽象一个技能的,技能由一堆触发器组成,比如特效触发器,动作触发器,声音触发器,摄像机震动触发器等等,这些触发器到了某个条件就执行触发,触发条件一般是时间,如果有比较复杂的浮空技能,可以增加落地触发等.

自定义一个技能文件,代替excel表格,看起来是这样:

简单的技能:

每一行都是一个触发器,这些触发器,到了某个条件会自动触发.

上面的意思就是,第0秒开始面向目标,第0秒开始播放动作1000

复杂的技能: More

Unity设计模式之-Unity3d游戏开发设计模式之子类沙盒模式

 

本篇文章我们来看下Unity3d游戏开发设计模式之子类沙盒模式,下面开始,积累提供所有操作(的实现)来定义子类的行为,用一个最简单的例子来讲解这个模式玩家操纵的英雄也就是这个游戏的主角会有许多技能,我们想定义许多不同的技能,来让玩家使用。
首先我们定义一个skillBase类作为基类,我们所有技能的动作都在这里实现。我们可以从这些基本元动作中组合出各种各样的技能,甚至成百上千种,可以 设计一个doc文档来设计各种技能的操作,及操作顺序。这就是之所以为什么叫子类沙盒的原因,把实现技能的方法作为沙盒,向这个沙盒里加入各种各样的元动 作来组成各种各样的技能。 More

Unity设计模式之-备忘录模式

 

我们在游戏开发的时候,经常需要保存游戏对象的中间状态,当需要的时候,可以恢复到这个状态。比如最常见的就是进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返回。这时我们便可以使用备忘录模式来实现。好了,废话不多说,切入正题!

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态

类型:行为类

类图:

More

Unity设计模式之命令模式(Command)示例

 

本篇文章我们来学习下,命令模式Command在unity3d中的应用,下面开始!

在游戏编程里面,有一个经常会被用到的设计模式-命令模式。

我对设计模式的理解是

1、为解决问题而生。

2、有大致流程,但是没有固定格式

3、为了沟通方便。

在游戏编程里面,或者软件开发里面,最能体现命令模式的应用场景是

“撤销”与”再做”

在策略游戏里面,有时候我们会提供给玩家去模拟下一步的功能,在他还没确定之前都是能够撤销我们的行为的。比如象棋,比如五子棋,或者在商店系统的时候,玩家购买完东西后悔了,我们可以让玩家去撤销操作。

在编写游戏工具给策划同事使用的时候,没有撤销功能的话会被亲爱的策划骂成狗的。

More

装饰模式在unity3d里面的使用

 

修炼装饰外观(门面)模式的心法如下:
1)  外观(门面)角色Façade:客户端可以调用此角色方法。本角色知晓子系统的所有功能和责任。一般情况下本角色没有实际的业务逻辑,只是一个委托类。
2)  子系统角色Subsystem:可以同时又一个或者过个子系统。每个子系统都不是单独的类,而是一个类的集合。子系统并不知道外观(门面)的存在。对于子系统而言,外观(门面)仅仅是另外一个客户端而已。

修炼心法与武功套路的对应:
1)  外观(门面)角色Façade对应武功套路里面的Façade。
2)  子系统角色Subsystem对应武功套路里面的MessageModel、MessageInfo 、UIAnimaiton 、UIAnimationWithMessageInfo、UpLevelController。

上面描述了外观装饰(门面)模式的修炼心法和武功套路。下面就给出具体的套路细节。
建议:看下面代码之前,可以先根据装饰模式的心法及对应的武功套路先行修炼。
外观(门面)角色:
More

Unity3d中UI开发的MVC模式

上篇文章《Unity3d架构之-Unity MVC框架 StrangeIoC》我们学习了StrangeIOC mvc模式的经典案例,本篇unity3d教程我们继续来学习下Unity3d中UI开发的MVC模式 ,和游戏开发的其他模块类似,UI一般需要通过多次迭代开发,直到用户体验近似OK。另外至关重要的是, 我们想尽快加速迭代的过程。使用MVC模式来进行设计,已经被业界证明了是可以解耦屏幕上的显示,如何控制用户的输入对显示的改变,以及如何根据应用的状态进行改变。MVC模式提供了以下好处:

(1) 可以修改UI的外观,而不用修改一行代码

(2) 在不同的组件里面可以共享同一套逻辑代码,用来创建复杂的视图;

(3) 可以用很小的代价来改变UI的实现,比如正在使用NGUI , 但将来会切换成 UGUI

代码示例

这里提供了一个MVC在使用NGUI开发的例子,需要注意的是,我们不能在代码中提供NGUI库,毕竟它是收费的,所以想运行起来的话,需要自己导入NGUI库。接下来的内容都会以这个例子的代码作为基准,所以可以在阅读时可以先把代码下载下来。

总体概述

这是一张简图,从宏观的角度描述了代码中MVC模式的不同部分。

Model More

Unity设计模式之IOC模式

 

本篇unity3d教程我们来学习下IOC设计模式思想在Unity中的应用,下面开始

IOC英文全称:Inversion of Control中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。
作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口,当系统重构的时候代码的改写量将大大减少。
理解依赖注入:
当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。

1.依赖

依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一个简单的示例: More

Unity统一管理回调函数—观察者模式

 

开场白

我们来想象一个场景。在加载一个模型时,你需要从网上下载,但是你并不知道下载需要花费多少时间。你所知道的是,当下载完成后,就可以把模型放在特定位置上,开始游戏。那么,我们怎样才能判断下载完成呢?
一个简单的方法是,在每一帧的时候都判断下载是否完成,完成后就可以继续后面的工作。因此,我们可以这样做,我们告诉一个管理器,嗨,你帮我盯着点,看下载完了没有,完了就叫我一声,好让我执行XXX函数。我们今天要做的,就是构造这样一个管理器。

More

再谈Unity控制逻辑一个轻量级的状态机

 

关于状态机这种设计模式不用多介绍了,特别是FSM。不了解的童鞋,请参考下面文章
Unity3d架构系列之-FSM有限状态机设计一
Unity3d架构系列之- FSM有限状态机设计二
Unity3d架构系列之- FSM有限状态机设计三
Unity3d架构系列之- FSM有限状态机设计四(总结篇)
现在是我实现一个轻量级的状态机,不废话了上代码先

More