Unity设计模式

Unity3d架构系列之-任务系统书写

 

任务系统一直是游戏中非常重要的系统,它一直伴随在游戏左右,玩家通过完任务去赚取装备,去升级,所以说任务系统是非常重要的,值得我们好好去架构。在手 机中的任务系统没有PC端那么复杂,在Unity中由于有委托以及事件等语法功能,实现起来相对简单。接下来我们就开始实现任务系统。

第一步:我们需要定义任务类,我们的设计思路是一个任务对象就是一个协程coroutine,任务能够开始,停止,暂停,如果试图开始一个被停止或者是被终止的任务它是错误的。

以下是代码构建:

More

Unity3d架构之-Unity MVC框架 StrangeIoC

 

由于工作原因最近在看unity的一个IOC框架:StrangeIOC,官方的文档都不是很好理解,找到了一篇比较好的GetStart文章,顺手翻译一下,一来方便自己加深理解,二来还是想共享出来,

Strange是一个unity3d中用于控制反转的第三方框架,控制反转(IOC-Inversion of Control)思想是类间解耦的一个重要方法,对于我来说,任何解耦技术都值得去学习。什么是IOC?这里有详细解答。IOC框架已经在企业级开发和其他非游戏软件的开发中成为了主流,并且可以说已经非常成熟。我觉得它可以帮助游戏开发变得更加容易测试,更好的进行协作开发。我非常想尝试它看看到底可以在游戏开发过程中起到多大的帮助程度。

Strange使用起来真的像他的名字一样,非常”奇怪”。我发现它对于初学者来说,使用起来真的非常”闹心”,比如你想试着去写一个”Hello World”都非常不容易。这里是StrangeIOC框架的说明页面,但是这上面并没有一个真正意义上的”新手引导”来帮助我们了解Strange的工作机制,这就是你现在看到现在这篇文章的意义-用StrangeIOC框架写一个HelloWorld。
More

Unity3d架构系列之- FSM有限状态机设计四(总结篇)

 

 

由于最近一直赶项目进度,没时间写,昨晚终于项目终于完成了,空闲下来,做一个总 结。在这一篇中主要是把前五章一起总结一下,以及通过举例演示如何使用?有限状态机在游戏中使用的地方非常多,比如我们界面之间的切换,角色的状态切换等 等。所以非常值得大家去学习一下,接下来我们主要实现的功能,为了表达清楚,我通过图例给大家说明一下:

wKiom1TcXfDAJ_Q0AAEVcBwHlNY828.jpg

More

Unity3d架构系列之- FSM有限状态机设计三

 

继续上篇文章在设计二中,我们把事件系统EventSystem实现一下。这个EventSystem类主要实现的是事件的注册,触发,以及分发Event消息的作用。提供接口对外使用的。在这里面为了功能扩展方便用了好多模板函数,方便大家调用。

分发消息的时候,我们采用的是队列的方式,就是先进先出原则。

首先要把消息事件注册一下,就是将其放到我们预先定义的表里面。函数代码如下所示:

More

Unity3d架构系列之- FSM有限状态机设计二

 

继续上篇文章在设计一中,我们实现了有限状态机管理类,接下来,我们实现FSState这个类,这里类主要是状态的基本操作以及事件触发。在这里我们定义了在FiniteStateMachine类里声明的三个委托。在FSState里面使用的代码如下:


protected FiniteStateMachine.EnterState mEnterDelegate;
protected FiniteStateMachine.PushState mPushDelegate;
protected FiniteStateMachine.PopState mPopDelegate;

这个FSState是独立的一个类,不继承Mono,我们定义了一个构造函数,将我们的委托进行了初始化:

More

Unity3d架构系列之-FSM有限状态机设计一

 

我们在游戏开发中经常面临架构设计问题,在这里我就将一些经常使用的游戏开发方面的知识跟大家介绍 一下, 一是给大家提供一个设计思路,在此基础上可以举一反三,二是大家可以通过这个平台共同学习。闲话不多说了,切入正题,FSM有限状态机,在unity3d开发中如何使用?那些模块的设计需要它?接下来我们就分析一下游戏:

比如我们的玩家自身的状态切换,Idle,walk,attack等等,这些都属于状态的切换,可以用有限状态机;还有比如玩家去完任务:领取任务,杀 怪,交易,交接任务;还有界面逻辑比如登录,进入场景,退出等等,在游戏中状态切换还是很多的,以上我说的都可以使用有限状态机。既然这么多地方可以使 用,那么我们如何去设计有限状态机?

下面我们先设计我们的FSM有限状态机类图,如下所示:

http://s3.51cto.com/wyfs02/M02/59/1E/wKiom1THrgnDFZcsAAOShIcUaH0197.jpg

More

Unity3d 一个优秀的程序必备的几种设计模式

unity编程众所周知,它是属于脚本化,脚本没有一个具体的概念跟架构,
导致在项目过程中,经常出现哪里需要实现什么功能,就随便添加脚本,
结果,就造成了一片混乱,不好管理。
更有甚者,自己的写的代码闲置一段时间后,再去想找某个功能的实现,都要在视图中翻来覆去找半天。
哎!请容许我在此感叹一声,这还是你写的东西么?

因此,一个好的设计模式是多么的重要啊,
那么,我们在使用unity3d开发东西的时候,脚本架构到底应该如何来写?
呵呵…
其实,我也给不了你们具体答案,因为每个人的开发习惯,每个团队的开发模式也各有千秋,
so,在此我只做几种设计模式的总结,
主要参考书籍有《设计模式》《设计模式之禅》《大话设计模式》以及网上一些零散的文章,
但主要内容还是我本人的一些经验以及感悟。
写出来的目的一方面是系统地整理一下,一方面也与广大的网友分享,
至于你们到底如何使用,望君斟酌啊!

因为设计模式对编程人员来说,的确非常重要。
当然,如果大家的理解跟我有所不同,欢迎留言,大家共同探讨。

More

抽象工厂模式在unity3d里面的使用

今天咱们就要开启工厂家族里面的最后一个模式—抽象工厂模式。在修炼抽象工厂模式心法之前我先说个例子,大家都应该知道葵花宝典吧。想必你可能知道欲练此功必先自宫,哈哈!或许你看到的只是他的上半部,但当你看到下半部结尾一行醒目的文字-欲练此功也可不必自宫,此刻傻眼了吧!失去了独领风骚的快感。由此例子,来引出产品族的概念。葵花宝典的上下部产生了相互影响就可以认为是一个产品族。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。由产品族,我们来进入抽象工厂模式。抽象工厂模式是工厂方法的升级版,是所有形态的工厂模式中最为抽象和最具一般性的形态。因此所谓的抽象工厂是一个工厂等级结构可以创建分属于不同产品等级结构的一个产品族中的所有对象。说了那么多了让我们开始修炼抽象工厂模式的心法吧。

修炼抽象工厂模式的心法如下:
1)抽象工厂角色AbstractFactory:此角色是工厂方法模式的核心,与系统业务逻辑无关。
2)具体工厂角色ConcreteFactory:此角色在客户端的调用下创建产品的实例。他包含有选择合适产品对象的逻辑,而这个逻辑是与应用系统的业务逻辑紧密相关。
3)抽象产品角色AbstractProduct:担任这个角色的类是工厂方法模式所创建对象的父类或他们共同拥有的接口。
4) 具体产品角色ConcreteProduct:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,里面包含了应用系统的业务逻辑。

修炼抽象工厂模式的武功套路如下:

More

模板方法模式在unity3d里面的使用

 

武学之道,重在传承。在世代的传承中,每种武学都会有新的属性。往往是一代更比一代xooxxoox-强。举个例子,在《笑傲江湖》里,风清扬虽然出场不多,但是武功极高啊,这个老头真的很不简单,独孤九剑更是厉害的发毛哦。还记得华山之巅,“淫贼”田伯光找令狐冲比武的情景吧。风清扬把独孤九剑的心法招式传给了令狐冲。然后PK,然后令狐冲比较屌,更胜一筹赢了老色(田伯光)。那么野猪从这个小情节中,来讲述一下行为里里面的模板方法模式。

修炼模板方法模式的心法如下:
1)抽象模板角色AbstractClass:定义一个或多个抽象操作,一般是一个具体的方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。这个固定逻辑是一个顶级的逻辑框架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
2)具体模板角色ConcreteClass:实现父类定义的一个或多个抽象方法,是顶级逻辑的组成步骤。每一个抽象模版角色都可以有任意多个具体模版角色与之对应,而每一个具体模版角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

修炼模板方法模式的武功套路如下:
 
(备注:面是模板模式demo里面的定向关系图文档的截图!)

More

工厂方法模式在unity3d里面的使用

 

上一篇文章中我们讲了工厂家族里面的最简单的一套武功心法–简单工厂模式。想必大家已经领悟了如何修炼此内功心法了,也熟悉了此套武功心法所存在的弊端,稍不慎就毙命。所以我们需要学习另一套武功心法—工厂方法模式,来杜绝简单工厂模式存在的问题。

修炼unity3d工厂方法模式的心法如下:
1) 抽象工厂角色Creator:是工厂方法模式的核心,与应用程序无关。在此模式中创建的对象的工厂类必须实现这个接口。
2) 具体工厂角色ConcreteCreator:这是实现抽象工厂接口的具体工厂类,包含于应用程序密切相关的逻辑,并且由应用程序调用来创建产品对象。
3) 抽象产品角色Product:工厂方法模式所创建的对象的基类型或接口,也就是产品对象的共同父类或共同拥有的接口。
4) 具体产品角色ConcreteProduct:这个角色实现了抽象产品角色所定义的接口。具体的产品有专门的具体工厂创建,他们之间往往一一对应。
修炼工厂方法模式的武功套路如下:
designModel 

More