Unity3D游戏架构

Unity3D虽然是一款3D的引擎,但由于一部分开发者提供了GUI的插件,所以它也是可以用来开发2D游戏的,但我还需要改造一下。《王途霸业》就是完完全全在U3D上架构起来的2D游戏,在去年年底前完成这款游戏的架构底层后,开发速度直线上升,这也同样证明了我的这套架构的可行性。下面我将介绍如何用U3D和GUI插件架构一套2D游戏。

《王途霸业》U3D项目中有个最大的特点就是不再有纷繁复杂的脚本绑定,整个游戏逻辑不再依赖众多的 MonoBehaviour ,所有GUI不存在脚本绑定一说。我这样做最主要的原因是要将美术,策划,程序的工作完全拆分开来,美术看不到程序,程序不需要管美术,策划更是不需要去顾及那些纷繁复杂的美术和程序专业技术。这样做最直接提升了游戏项目开发效率,用一句话代表这种架构意图:各顾各的,却能成事。

文章停在这里,我一时不知道如何表达这种架构,因为我想说的东西太多,介于我的书面表达能力,能清晰的表达清楚这种架构不太可能。那我就讲最最最重要的部分,我的心理想法和架构思路。

一.架构必须符合安全性。关于项目安全性,很多人第一时间都会跟我说'在项目还没成型前,安全性并不重要'。确实当项目没有可看到的东西的情况下,这些所谓的资源都是没有价值的。但当项目看到有价值的时候,你再去做安全性还来得及吗,我能非常确认的说,那时你根本来不及做安全性的问题,即使你确实非常想推动这事,也会极其缓慢,而且在所有人眼里吃力不讨好,因为程序架构本身就决定了安全性的问题。C++项目里这问题并不十分严重,因为他不属于脚本语言,而U3D不同的是它全篇都是脚本。

二.分离美术与程序的工作。本架构的第一思想就是分离部门之间的工作。美术和程序之间有不可分割的交点,但项目必须保证程序不用去做美术的工作,不用去担心美术的问题,美术也不需要获得程序的工作内容,更不需要美术去学习程序。这最大限度保证了部门之间合作效率,也是我一直提倡的架构意图:各顾各的,却能成事。

三.消除程序员代码上的交点。架构本身就是解决程序员与程序员之间的问题。"为什么要把解决程序员与程序员的事做为重点问题?":游戏项目的进度,技术起了主导作用,程序员的工作效率直接决定了整个项目的速度,所以如何让程序员保持良好的效率也就成为了项目程序架构需要解决和考虑的范畴之一了。程序员之间在编写代码的时候,都会有这样那样的交点,有些交点是不应该被其他人修改的或删除的,这些错综复杂的交点会使得整个项目随着时间的推进越来越混乱的局面,致使项目后期进度缓慢效率低下,优秀的程序架构本身就提前考虑了交点问题,将交点以拆分,消除,或合并成组件等形式融入到整体设计当中。如果一个人就能搞定整套程序那也用不着这么多架构思想了,怎么写都是一个人在工作,他可以用无数种方式来编写自己的程序。但事实并非如此,毕竟人脑是有极限的,再牛的人也抗不住错综复杂的逻辑关系和单调的重复劳动。一个优秀的架构能够支撑整个程序团队快速高效并且持续地往前推进,每个人都心情舒畅,工作愉快,富有激情,何乐而不为呢。

四.分层结构设计全面可扩展。架构最重要的部分之一就是能够适应变化不断的项目需求,优秀的架构能够尽量减少当需求变化而引起的程序上的修改或删除而引起的整体架构更改。项目的需求变化并不是由我们可以控制,在不断变化的情况下,甚至是当程序员已经适应当前架构的情况下,架构这块基石仍是稳如泰山。我在架构设计时最看重分层设计,每一层都有统一的意图,且只可被上一层调用,必要时以动态库形式存在。

架构思想就谈到这里,接下来讲如何将这些架构思想融入到实际的Uniyt3D项目当中去。

一.SVN与AssetServer结合控制版本。这是分离美术与程序的第一步,也是保证安全性的重要手段。SVN更适合做代码版本控制,而AssetServer更适合做U3D的资源版本控制,两者相结合能够让项目管理更加出彩。

二.整个架构只有一个入口点。《王途霸业》中用只有GameClient类继承了MonoBehaviour,它也不再被其他类继承。它就是唯一一个入口点。各大系统,各大模块的初始化,逻辑更新,销毁,调用,都需要它的直接或者间接的调用。这就是为什么其他需要用到MonoBehaviour特性的程序不需要继承MonoBehaviour的原因。这是分离美术与程序的第二步,程序员不需要再去管理纷繁复杂的物体绑定脚本。

三.动态资源生成与管理。每个显示实例都由各系统独立承担生成,更新,销毁的管理,例如《王途霸业》中的GUI系统,每个GUI在展示时才进行资源生成,在隐藏时判断资源是否需要销毁,这不仅解决的动态资源控制问题也解决了内存控制问题。每个程序员只需要关注自己正在编写的GUI界面,而不需要估计其他GUI的资源问题。这是消除程序员交点的一个方式,也是分离美术与程序的工作。

四.独立模块以DLL形式存在。《王途霸业》中以DLL形式存在的独立模块有,2D动画系统模块、人物运动控制模块、基础模块、网络通信模块,GUI通用层模块。将《王途霸业》游戏分割为,网络层,基础层,专业领域层,数据层,安卓第三方SDK接口层,渲染层,工具层。渲染层又分为GUI层,动画层。做这些的层级的划分主要是为了能够架构成MVC模式。以MVC形式呈现的分层架构是一种效率比较高的架构,我在架构时尽量向此种架构靠拢,所以在项目后期确保了项目的安全性,也保证了程序部工作效率,架构越是到后期,发挥的作用越大。正所谓"人不可貌相,架构不可斗量",架构的威力就是体现在更加宏观的层面上。

五.尽量编写方便的工具。游戏架构不仅需要游戏主逻辑本身的规范,还需要这些周边工具的支撑,有了这些工具能让项目进度快速提升,加上优秀的架构思想,项目完工指日可待。

文笔过烂,持续更新中----往各位见谅。

2013051412202849588237.gif