You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
9.3 KiB
Markdown

2 years ago
# 第32讲 | 热点剖析(五):如何选择移动端的游戏引擎?
上一次,我和你探讨了[移动端游戏的一些区别和特点](https://time.geekbang.org/column/article/10423)我特别介绍了libGDX这款游戏引擎。因为这款游戏引擎是多平台的且各种第三方工具都很完备比如物理引擎、特效、2D骨骼动画工具等等所以libGDX目前已经被越来越多的公司和个人接受和使用。
在苹果端我们也讲到了苹果公司推出的SpriteKit游戏开发框架在苹果体系下使用XCode就可以很方便地使用SK工具开发出好玩的2D移动游戏。
从目前最新的游戏引擎的趋势看,一次编码、到处兼容已经成为了市场的主流,多种语言、一次打包(多种语言都可以编写相同的代码,然后配合打包成目标平台的游戏),也是程序员喜闻乐见的一种编程方式。
如果你准备编写移动端的游戏或者你已经是app程序员有编码经验但是想要转型游戏程序员那么你要对移动端的游戏引擎有一定的了解才能开始你的游戏编程之旅。
## 五种常见的移动端引擎
我今天介绍五种常见的移动端引擎分别是Unity、虚幻、App Game Kit、Corona SDK、Cocos2d-x。
### Unity
和虚幻之类有名的游戏引擎一样Unity最初是从3D网页引擎的样子进化成现在这样的。Unity普通版是400美元但是Pro版本要1500多美元但是如果你购买Pro版的话会得到更强大的功能和编辑器等等。Unity不仅支持电脑和移动端多平台还支持游戏机甚至掌上游戏机比如我们熟知的PS系列和PSV之类的比如《杀出重围》《神庙逃亡》等都是使用Unity引擎制作的。
Unity的**编程**可以使用C#、JavaScript、Java、Boo等脚本语言。对于FlashUnity已经放弃支持这个平台了。事实上Unity在版本4.0之前是可以支持将游戏转换为Flash平台的4.0后已经不支持转成Flash游戏了。至于Flash被各家放弃的原因我在之前的文章已经讲过这里就不多说了。
Unity拥有大量的所见即所得的编程**界面开发工具**。比如支持3D骨骼和动画的导入、贴图的材质可以转换为自身的U3D格式等等。
在**底层**方面它支持OpenGL以及DX系列。它自带的物理引擎、粒子系统性能也极其高效还支持网络系统所以你可以使用Unity来编写单机或者网络游戏。
### 虚幻
这个大佬级别的引擎你一定不陌生。它现在已经支持在移动平台使用了。虚幻有免费版本和付费版本但是只有付费版本你可以获取引擎全部的C++源代码。最为可贵的是出品虚幻的Epic公司有发布[完整](http://study.163.com/course/introduction/185001.htm)[的](http://study.163.com/course/introduction/185001.htm)[教学视频](http://study.163.com/course/introduction/185001.htm),而开发人员也能从网络社区获取大量的学习资源。
这款引擎不仅仅在游戏引擎技术方面比较优秀,运营方面、市场方面,在行业内都是属于前列。耳熟能详的《蝙蝠侠》《阿卡姆之城》等等用的都是虚幻引擎。
虚幻引擎有完整的**数据属性编辑功能**。关卡设计人员可以自由地对游戏中的物件进行设置,也可以通过脚本编写的形式进行优化设置。关于关卡编辑器的功能,我在[之前的文章](https://time.geekbang.org/column/article/8670)中有详细介绍。
虚幻的**资源管理器**可以进行快速准确地查找、观看并对游戏开发中的各种资源进行整理组织。地图编辑器可以让美术开发人员自由地对地形进行升降调节。更强大的是它可以通过带有alpha通道的笔刷对地图的层进行融合修饰可以在地图编辑中生成碰撞数据和位移贴图你看到的可以说是游戏场景的一种演示版也不为过。
它的编辑器还为美术制作人员提供了完整的模型、骨骼和动画数据导出工具,并可以编辑游戏事件所需要的声音文件、剧情脚本。
### App Game Kit
我个人认为App Game Kit 比较适合刚进阶的游戏开发者。这款引擎使用非常容易上手,你可以去它的[官网](https://www.appgamekit.com/)看最新发布的消息。有一款Driving Test Success的应用就是使用AGK编写的当然这是一个商业化的付费引擎。这款游戏引擎也支持树莓派上编程可谓是各个平台都兼容。
### Corona SDK
如果你深入学习过或者接触过移动端游戏开发的话你一定知道这款游戏引擎。这款引擎不仅仅是跨平台支持甚至还支持Kindle电子书这类的平台。
它的编程语言为Lua我们在之后的文章会介绍Lua和C语言的绑定我在这里只是简单说一下。相对于别的语言来说Lua更加轻量级对初学者来说也更容易上手。
Corona SDK的客户除了个人也有很多知名的大厂比如日本的南梦宫等等。当然收费也并不便宜专业版就接近600美元企业版接近1000美元当然如果是企业用户的话这点投入比之自己编写引擎来说划算得多。
Cocos2d-x
国内的朋友对这款引擎非常熟悉与此同时它的同胞兄弟Cocos2d系列我也在[前面](https://time.geekbang.org/column/article/9702)做过一些介绍。
很多人以为Cocos2d-x是中国人编写的。事实上Cocos2d的作者是一个叫Richardo的阿根廷人。Cocos是在阿根廷的一个叫Los Cocos的地方诞生的。由于Richardo的学习曲线是汇编、C/C++、Python所以这个时候Cocos版本是Python的。他们将研究成果在PyCon 2008和EuroPython 2008上都做了展示。
2008年的时候他们抓住iPhone发布的机遇在2008年6月宣布支持iPhone然后沿用了Python版本的Cocos2d相同的设计思维用Object-C重新编写了iPhone版的Cocos2d并且发布了0.1版。智能手机刚起步的时候iPhone用户数量明显多过安卓所以Cocos2d刚开始就笼络了大批iPhone开发者随后又有了安卓版。所以现在用Cocos2d引擎编写的游戏几乎随处可见。
在2009年的时候Cocos团队编写了Cocos2d的World EditorCocos2d-Python。这个编辑器用起来非常方便随后Cocos2d的各种平台和各种语言的移植版本也逐渐被各类程序员拿去开发并且出现在开源社区。
我们可以看到几个主流语言的绑定版本:
* Ruby版本ShinyCocos
* 安卓版本Cocos2d-Android
* .NET 版本CocosNetMono based
* Windows版本
这里有一幅来自它的官网的产品分支图你可以比较清晰地了解Cocos2d的各个分支。
![](https://static001.geekbang.org/resource/image/18/1c/183105d6284d501f3337c192ffebe11c.jpg)
同时经过几年的努力Cocos系列也拥有了非常优秀的编辑器例如SpriteSheet Editors精灵序列图编辑器、Particle Editors粒子编辑器、Font Editors字体编辑器、Tilemap Editors瓦片地图编辑器
CocosStudio这款工具集套件于2012年发布它是Cocos2d-x团队官方推出的游戏开发工具。CocoStudio根据开发团队自己在游戏开发中的经验为移动游戏开发者和团队定做了这么一套集成工具用意在降低游戏开发的门槛提高开发效率当然最主要还是为了Cocos2d-x占领游戏引擎市场。
## 如何选择引擎?
今天我介绍了这五款引擎,在开发的过程中,究竟该如何选择呢?如果接触游戏开发不久的话,你肯定还是会有点懵。 **其实只要有选择,就有取舍,你只要明确自己的需求,然后结合自己的需求和引擎自身的特性,来对比选择就可以了。** 这里我把这五种引擎的一些特点,总结了一下,列了一个表格。你在选择的时候,可以作为参考。
![](https://static001.geekbang.org/resource/image/52/b5/5207890afc60df1fef5d8ce01edda6b5.jpg)
首先如果我们只是编写2D游戏那么Cocos系列一定符合你的预期而且能方便地制作出跨平台的游戏。
如果我们编写的是3D游戏如果是商业购买多话那么Unity和虚幻一定是不错的选择。在财力足够的情况下选择这两个大厂级别的游戏引擎一定会让你满意。
但是如果你需要编写休闲的、规模不大的游戏那么Corona、App Game Kit就可以用。
## 小结
我们总结一下今天的内容。
* 首先移动平台的游戏引擎有一个最大的特点游戏引擎已经逐渐演变成跨平台能力的游戏引擎如果不这么做很块就会被别的竞争对手所淘汰我们先前讲到的HTML5游戏引擎都可以编译出不同的跨平台的目标代码。
* 其次移动游戏引擎要挑选适合自己的才行引擎规模有大有小做出来的游戏质量也都不同。游戏开发大厂可以选择虚幻引擎中等公司可以选择Unity个人团队可以选择Cocos2d或者App Game Kit个人开发者或者轻量级开发可以选择Corona SDK。
最后,给你留一个小思考题吧。
如果用移动平台的游戏引擎编写移动应用,是否可以实现呢?
欢迎留言说出你的看法。我在下一节的挑战中等你!