您的位置:首页 > 移动开发 > Cocos引擎

一个基于Unity3d思想的cocos2d引擎

2013-07-25 12:48 225 查看
去年11月我离开了工作的第一个公司,后面一直处于游荡状态。刚开始很难放松下来,总想弄点啥,不过也没找到很想做的东西。后面完全休息了几个月,才感觉到原来自己很累。

后面有朋友叫我去做手游,我自己也不怎么玩手游,但机缘下看了一下手游开发的一些技术,现在主要就是采用cocos2d-x这套开发库。
cocos2d-x只是一套开发库,不是一套引擎,因此在开发游戏时还是有不方便的地方:

没有完整的工具,虽然有零散的第三方工具,但好用的都是收费的,并且有些还只有mac os版,想想在没有可视化工具下调整sprite和UI的位置。

你得找数个熟悉C++的程序员,根据以往的经验,开发游戏逻辑能不用C++就不要用,不管你的C++能力有多强。你可以选择使用lua和js,但它的脚本也只是C++接口的一个简单映射,并且好像是没有调试功能的(可以使用Decoda,但真心难用);

开发稍大型的游戏,你得再封装一套底层框架,这套东西稳定性和易用性很是问题;

(经友人提示,开发工具已经比较多了,以上内容纯属虚构)

好吧,我是个打广告的,说很多别的不好,自然是要说我有个很好的东西。

这个东西就是我正在开发的一套引擎,4月底开始做的,目前完成进度大概80%,框架已全部完成,剩下都是编辑器细节的东西。

这套引擎采用unity3d的对象组件框架+cocos2d-x的底层,界面是采用QT写的,天生就是跨平台的。

unity3d是我关注了很久的一个引擎,从组件、脚本到物理、渲染和动画各方面我都仔细看过,虽然我没有用它做过项目。从技术角度来讲,untiy3d最核心的东西就是对象组件系统,这个系统可以让项目开发效率大幅度提升。为啥?

老外股子里的思想:抽象、独立、合作,他们的语言就是符号语言,他们可以用一套公式去描述人类语言,甚至整个世界。

有时候我们容易陷入太为项目开发而写大量的代码,然后把各系统的耦合度搞得很高,但其实引擎就是应该提供一套完全与项目无关的对象体系。

抽象:

项目(Project)由若干场景(Scene/Level)构成;

场景中所有的东西都是一个对象(GameObject);

对象由名字(name)、标签(tag)和若干组件(Component)构成;组件构成了对象的外在形象和具体行为;

独立:

各个组件之间是完全独立的,可以单独添加或删除(如果有特别需要,可以进行关联。比如rigid和collider之间);

合作:

组件提供了若干可以完成具体行为的接口,可以被自身或其它对象的脚本组件访问,以完成对象的各种功能;

然后整个游戏世界都有了,对任何项目都没有差别。为啥这样就提高效率了?因为不用再关心任何底层,你只需要去关注游戏逻辑,对象是什么样的,它要干什么:

我需要一张桌子,玩家不能穿过:创建一个空对象,然后添加一个MeshRender组件,并且给它一张桌子的贴图,然后添加一个Collider组件让它变成障碍物;

我要一个怪物出生后跟着主角跑:创建一个空对象,写一个lua脚本完成跟踪主角的功能,然后把这个脚本组件赋给这个怪物;

我需要一个游戏界面:为Layer添加一个GUI组件,并且在可视化的界面中通过方便的鼠标操作完成编辑,通过Layer上的脚本回调接口还可以完成相应的逻辑操作;

等等等等...

所有的代码都用脚本完成,一些简单的项目,像Iphone上的Doodle Jump,愤怒小鸟这样的游戏,你甚至不需要专业的程序员。

当然一个引擎好不好用,主要还是具体功能的易用性,我闭着眼睛想了一下,需要哪些东西,才算一个好用的引擎:

所见即所得的场景编辑器;

所有组件编辑都是可视化的;

脚本编辑和可视化的调试器;

可以随时模拟运行;
预置系统(Prefab);

层级系统(即父子系统)

粒子编辑器;

UI编辑器;

编辑状态下,所有的文件都能实时刷新;

所有以文件名或对象作为参数的地方都支持直接拖拽;

还得提供很稳定底层和错误提示。

整个做下来感觉算是一个中等规模的项目,其中预置(Prefab)是一个很重要的系统,这个花了几天时间,其它的都比较顺利。底层的渲染已经由cocos2d-x完成了。脚本调试是用原来项目的一个命令行工具改成了可视化。

开发工具:  VS2012+QT4.8.5+cocos2d-2.1.3

vs2012的黑色销魂界面,让人欲罢不能,夜间工作时长显著提高,呵呵
上两张图片,有些图标是我自己随便涂了两下,以后会修改:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息