本节书摘来异步社区《Cocos2D-X游戏开发技术精解》一书中的第1章,第1.1节,作者: 刘剑卓 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
Cocos2D-X游戏开发技术精解什么是游戏引擎?提到“引擎”一词,很容易想到汽车、轮船以及飞机。这些由机器驱动的交通工具,其能量的来源就是引擎。游戏引擎和汽车引擎在概念上是一样的,都是驱动整体运转的核心部件。游戏产品的核心就是引擎,它是每款游戏的运行基础。引擎的好坏直接影响着游戏的品质。
引擎的概念应该是来自机器制造。它通常作为机器设备的动力核心,所以有人将引擎称作发动机。引擎最大的作用,就是能够为依附于它的部件提供能量。引擎对于机器的重要性不言而喻。如果以人体为比喻的话,引擎就好比心脏。试想一下没有了心脏,人就无法存活。同样,汽车没有了引擎,也只能依靠人推马拉。不过,就像心脏可以移植,引擎也是可以更换的。一辆好车,一定要配有一个强劲的引擎。图1-1所示的就是一款跑车的引擎。单看其十缸的结构就能知道这是一款性能卓越的引擎。
图1-1所示的引擎,是人类工业化艺术的最好呈现。现在汽车引擎的鼻祖是工业革命时人类发明的内燃机。如今的汽车引擎都是以燃油为主,也有使用混合动力的。由内燃机发展至汽车引擎,人们大约用了二十年的时间,在二十年间经历了无数次的技术革新。其实每一次技术的变革都不是突然发生、毫无根据的,而是制作行业发展到一定规模才出现的。因此引擎并不是上帝赐给人们的礼物,也不是来源于自然的神奇生命,而是人们知识的结晶。
对于游戏引擎,也是同样的道理。引擎也是一款游戏的核心,它为游戏中其他部分提供了功能服务。没有了强劲引擎的支持,游戏将会逊色许多,甚至遭到玩家的遗弃。许多老旧游戏产品的命运就是如此。从世界上第一款游戏算起,至今也有三十年的时间了。在这期间游戏引擎的发展,也是逐渐形成、不断地推陈出新的过程。
说明:
在电子游戏初期,并没有核心引擎。引擎是在游戏技术发展了一段时间后产生的。
综上所述,无论是汽车引擎,还是游戏引擎,其制作技术仍然在不断地推陈出新。从早期简单、局限、低效,到如今丰富、开放、高效,经过了许许多多开发者的辛勤工作。更少的损耗、更高的性能,这正是引擎设计与制作一直追求的目标。
虽然引擎是一辆汽车的重要部件,但它并不是整辆汽车。事实是引擎是一个独立的部件,是能够从汽车里面取出的发动机。工人可以建造另外一个外壳,再将引擎安装入内,这就产生了一辆新的汽车。所以说引擎作为核心部件,是可以更换,也可以重复使用的。
游戏中的引擎也是如此。作为游戏的核心,它并不是游戏的全部。一款优秀的游戏引擎经常被用来制作很多游戏产品。这些产品在市场上将单独出售。因此为了保证引擎的通用性和标准化,引擎需要具备让游戏运行的基本功能,但不能含有游戏特有的功能。所以一款好的游戏引擎应该可以轻易地更新换代,同时又可以重复利用。
说明:
有些引擎为了宣传效果,会使用和游戏相同的名字,比如Quake,致使许多人会混淆游戏引擎和游戏本身。
在前面的介绍中,读者知道了引擎的作用。在游戏和汽车中引擎有很多类似的概念。但是游戏引擎也有很多自身的特点。下面我们通过游戏引擎产生的过程,来了解它的特点。
正如前面所说,游戏引擎并不是一开始就有的,也是通过了技术发展与革新的。游戏引擎的概念首次出现在1990年id Software发行的《Doom》游戏当中。为了更好地展现游戏魅力,《Doom》开发者约翰·卡马克将其建立在一个性能优秀的内核之上。当时的游戏内核具备三个主要功能:游戏中画面的渲染、物体之间的碰撞以及音乐音效的播放。
说明:
正是因为上述的原因,约翰·卡马克被大家习惯地称为游戏引擎之父。
卡马克意识到内核所提供的功能完全可以脱离游戏而独立存在,内核可以重复利用,作为今后其他游戏产品的内核。于是,他就把游戏中给玩家带来直观感觉的内容剥离掉,其中包括:图片数据、逻辑运算、游戏规则等,那么余下的内容就是重复利用的核心部分。这个核心部分后来就被定义为“引擎”。当然,具体工作可不是两句话这么简单。从那之后,由于引擎的诞生,游戏制作领域就进入了一个崭新的时代。开发者开创了一种全新的游戏开发模式:游戏“引擎”开发。
引擎开发方式逐渐取代了原本一体化的开发方式。早期游戏制作时,一款游戏由许多的模块构成,它们紧密地结合很难单独拆分出来。这就导致原本的游戏产品除了升级优化,推出后续版本之外,别无他用了。当需要准备制作新的游戏时,并没有多少可以再次利用的功能。而引擎化的开发方式,则克服了低利用率的缺陷,充分利用开发者的工作成果。这种模块化、封装化以及良好扩展性的游戏开发方式,逐渐成为了主流。
如今开发者几乎都会使用引擎来制作游戏,很少有使用一体化开发游戏方式的了。那么选择一款优秀的游戏引擎,就成为游戏制作之前的首要目的了。怎样才算优秀的游戏引擎呢?作为第一次接触游戏开发的读者来说,很难作出决定。下面来介绍一些游戏引擎的特性作为参考。
说明:
有些独立游戏开发者为了自娱自乐,仍然热衷于一体化开发方式。
(1)稳定压倒一切!游戏引擎首要标准就是稳定,必须能够保证游戏产品的顺畅运行。引擎为玩家提供稳定连续的游玩体验算是最本质的要求。如果游戏中经常出现中断、崩溃或者画面错乱的问题,对于玩家的体验感损失非常大。
另外,从游戏开发的角度来看。通常引擎的开发者与游戏制作者不是同一人,游戏制作者并不熟悉引擎的编码。由于引擎大多进行封装,隐藏了内部的逻辑与调试信息,如果一个问题是由引擎内部产生的话,接下来的修补工作将是很难进行的。所以,稳定性是游戏引擎制作的首要标准。就算性能再强劲的引擎,如果问题重重的话,那也是无人问津的。
(2)性能是引擎好坏的关键。引擎性能一方面是指游戏运行时的流畅度,实际的技术参数就是指每秒屏幕的刷新率。另一方面,就是指引擎能够承载的运算量,比如是否可以进行复杂的物理模拟运算,能够支持多少个画面层次。它通常用来衡量一个引擎的好坏。这就好比汽车引擎的功率,游戏配备了性能强劲的引擎,就能够表现给玩家更多、更丰富的内容。如果把引擎比作心脏的话,一款好的游戏必须要拥有强劲、节奏均匀的心跳。性能好坏,通常是开发者选用引擎的标准。
(3)好的引擎就要有丰富完善的功能。随着玩家对游戏的需求和硬件设备性能的日渐提高,现在的游戏引擎不再是一个简单的渲染引擎。它需要涵盖许多丰富的功能,比如二维图形绘制、三维图形绘制、多声道处理能力、人工智能、物理碰撞、文件存取、社区分享、UI界面、动画视频等。丰富的功能为开发者提供了更多的选择,更能发挥游戏制作者的创造力。游戏引擎就像是一把多用途的瑞士军刀,或者是机器猫的口袋,开发者有了它能够应对各种各样的问题,满足玩家千奇百怪的口味。
(4)简单易用才是引擎发展的王道。引擎是被用来制作游戏的工具,那么必然要易于使用。钻木取火是非常麻烦的一件事,但是有了打火机后只需要轻轻一按,就能获得光明和温暖了。引擎也要发挥同样的作用。因为开发者使用引擎时,也要编写部分的代码,所以那些具备了简洁高效的程序接口、完善的技术支持文档的引擎将会更讨人青睐。
引擎要具备丰富的功能,同时还要简单易用。这算是所有消费者的心理需求。现代科技就是把一些复杂的事情简单化,游戏引擎也是如此。就好比按一下开关,洗衣机就会自动进水、洗涤、甩干等。对开发者来说,也许只需一行简单的命令,就可以让游戏中的人物完成跳跃、奔跑、站立的动作。引擎会把复杂的图像算法、物理模拟等功能封装在模块内部,对外提供的则是简洁高效的程序接口。这样有助于游戏开发人员迅速上手,这一点就如各种编程语言一样,越高级的语言功能越丰富,越容易使用。
另外,引擎也会为非编程人员提供可视化的编辑器或者第三方插件。实际开发过程中,只依靠引擎制作游戏是不够的,制作人员还需要各类工具来提高开发速度。所以引擎需要具备可视化编辑器,包括场景编辑、模型编辑、动画编辑、精灵编辑等。编辑器提供了所见即所得方式,不仅会加快制作的速度,也能保证游戏的品质,减少开发人员的错误。这些编辑器或者工具,不仅仅是为编程人员准备的,而是所有游戏参与人员都有可能使用它们。
说明:
有些引擎本身就是一个集所有功能于一身的编辑器。
第三方插件则是另一种形式。它们通常是一些软件的辅助工具。例如游戏开发中美术人员经常会用到的第三方软件3DS Max、Maya、Photoshop等等绘图工具。引擎中提供了与其对接的插件。在第三方插件中,美术人员所制作的游戏资源,不再需要其他工具的辅助,直接可将资源转换为引擎需要的格式。当美术人员用编辑器调整人物动画时,可发挥的余地就更大,做出的效果也越多。这样就节省了开发人员的学习成本。
(5)跨平台特性是引擎的趋势。随着越来越多的电子设备融入人们的生活,为了给用户更加全面的体验,游戏引擎跨平台特性也逐渐被开发者重视。引擎能够帮助开发者实现游戏产品跨越不同平台带来的差异。开发者只需编写一套代码,就可以在多个平台运行。这无疑会节省游戏开发的成本,缩短周期。另外,更多平台支持,就意味着更多用户选择,也会为开发者带来更多的收益。
经过上面的介绍,读者对引擎的好坏也有评判的标准了。不过,世界上没有完美的事物,所以也没有最好的游戏引擎。对于开发者来说,需要做的是选择一款最适合的引擎。接下来,为读者介绍一些知名的引擎。虽然本书的主题已经确认,将会以Cocos2D-X引擎为主,不过,可以扩宽知识内容,有对比的学习,也未尝不是一件好事。
从第一款引擎的出现到现在已经过去了二十多年。这期间出现很多值得称赞的引擎。这些引擎各具特色。开发者使用它们也制作了许多为玩家所喜爱的经典游戏。限于篇幅,很难逐个地为读者详细的介绍。但是读者也不能作为井底之蛙,只看到眼前一个游戏引擎,毕竟Cocos2D-X引擎与那些老牌游戏引擎比起来,只能算是新起之秀。单就游戏技术而言,移动平台依旧是在追随其他游戏平台已经实现的内容。
说明:
最领先的游戏技术大多应用在个人电脑以及家用机平台。
从游戏发展的历史来看,移动平台的游戏产品在全球游戏产业中只能算是冰山一角。但是,它作为新型平台,蕴涵爆发的能量,其快速扩张的程度已经占据了一定的市场份额。几乎所有的知名游戏引擎厂商都十分注重甚至已经进入了移动游戏市场。短短几年的发展,iOS设备全球扩张的速度,足以威胁到了原本的游戏产业。我们都知道iOS设备推出之初,并不是为游戏打造的。但是根据AppStore的数据显示,人们最热衷的依然是游戏类的产品。据欧美国家统计,今年的圣诞节孩子们最希望的礼物,已经从家用游戏机转到iPad了。
表1-1列出了一些知名的游戏引擎。它们是众多游戏引擎中的一部分。按照粗略的估算,在游戏产业中至少存在上百款游戏引擎。正是这些引擎推动了今天游戏产业的繁荣。大体上游戏引擎可以看作两类:2D和3D。这只是根据其产出的游戏产品来划分的。按照比例来看,3D游戏引擎占据了主流地位。这主要是因为3D技术的复杂度,导致一般开发者很难独立制作,所以会借助成熟的游戏引擎。而2D引擎因为技术比较成熟、容易实现、制作周期短,所以行业内的成熟产品不多。很多的2D引擎是开发团队或者公司内部使用的。
注意:
有些2D引擎也是使用3D技术来渲染画面的,大部分的3D引擎都可以用来制作2D游戏。
在表1-1中,引擎按照类型来区分,大致可以分为三类:授权、开源和自主。这三类涵盖了市场上所有引擎的种类。不同的开发者将会有各自选择的类型。下面就按照分类,依次为读者介绍每种引擎的特点。
授权类的引擎,是指具备深厚技术实力的引擎厂商开发,通过授权的方式出售给游戏制造商的引擎。授权类的引擎主要以3D的类型为主。比如虚幻、Unity3D、Torque、CryEngine等都是非常不错的授权3D引擎。这些引擎原本都是针对个人电脑以及家用游戏机平台的,随着移动平台的全球火爆,一些引擎也纷纷推出的移动平台的版本。因为移动平台的游戏规模小,所以其价格也相对优惠。例如虚幻引擎(UDK)针对开发者前期免费使用,只有在游戏产品售出超过一定规模后才需支付费用。Unity3D引擎的iOS平台版本只是销售1500美元而已。
3D引擎的制作难度以及开发周期都要远远高于2D引擎,所以对于一般开发者来说直接购买成熟引擎要比自主开发更适合一些。授权引擎中几乎包含了游戏开发的所需全部内容:渲染、编辑工具、物理体系、人工智能、网络通讯等。引擎框架严密而稳定,功能丰富易用,相关的配套工具以及技术文档也十分全面。毕竟开发者支付了费用,所以能够享受到周全的服务。况且,使用授权引擎能够降低开发失败的风险,因为大多数的授权引擎,已经被用来开发了很多游戏产品。
注意:
在购买授权引擎时,需要明确购买的内容。很多的授权引擎是按照开发者购买的内容来计算价格的。
虽然授权引擎提供了完善而丰富的游戏功能,但是因为其需要支付一定的费用,所以对于资金有限的开发者来说还是不太合适。除了需要支付费用之外,授权引擎还有下面三点不足。
(1)授权的引擎中的源代码和工具通常是不开放的。当开发者遇到一些致命问题时,自己是很难解决的。唯一可行的办法,就是依靠引擎提供方的技术支持。这可是一项耗时耗力的沟通工作啊!尤其是对于国内的开发者来说,除了语言上的交流困难之外,还会因为距离、时差等因素导致沟通周期很长。
(2)由于引擎提供的功能是早已定制好的,虽然可以扩展相关的模块,但也是在限定范围内,如果开发者需要为自己的游戏加入新的特有功能,这也将会是一件难事。同时,游戏引擎的最新版本是掌握在厂商手中的,开发者很难及时地将一些新的技术应用在游戏项目之中。
(3)最后,由于引擎并不属于游戏制作商,导致游戏产品本身缺乏核心的价值。再加上,同一商业引擎可能已经被应用到许多的游戏当中。这就导致游戏之间同质化的现象是十分明显的。游戏的特色就不能依靠引擎来体现。
总之,如果开发者没有时间以及能力开发一个新的引擎,就不要介意购买第三方的引擎!读者需要明确,购买一个商业引擎并不意味着在游戏制作的过程中不再需要技术人员了。虽然引擎完成了许多的编码工作,但是游戏中的逻辑或者规则,还是需要编写代码。编码可能是某种脚本语言,也可能是某种编程语言。授权引擎适合那些想要一个成功的、现成的解决方案的开发者。这样的话,他们就能够把精力集中在游戏可玩性和创造内容上。授权引擎几乎用最优化的方法解决了游戏开发中的技术问题。它可以快速帮助开发者完成游戏产品。
注意:
每一款商业引擎都存在局限性,可能是游戏类型的限制,也可能是游戏平台的限制,开发者在购买之前需要仔细考虑。
自主研发类的引擎通常是一些游戏制作公司出于制作游戏的需求而开发的引擎。其实授权引擎的前身大都是自主研发类的引擎。引擎制作商最初的引擎都是用来制作自己发行的游戏,在游戏产生良好市场效益并获得了开发者和玩家认可后,才转为商业引擎的。这些引擎多半是因为一款成功游戏而被人们所熟知。自主研发引擎是最传统的游戏开发方式,也是使用最为广泛的。比如id Soft知名的Doom引擎,就是用来制作Doom游戏的引擎,在技术成熟和产品成功后,就成为了授权的商业引擎。
说明:
Doom引擎现在已经是免费的引擎,曾用于《Doom 》和《Doom II 》。Doom 3引擎还在销售中。
自主研发引擎的方式,适合具备游戏开发经验,有一定技术实力的开发者团队或者公司。自主研发引擎需要时间、人力和资金投入,这对于一些独立游戏开发团队是一笔不小的前期开支。不过,自主研发引擎获得成功,这将是一个游戏团队最核心的价值。游戏开发者可以按照自己的意图去构建引擎来制作游戏。引擎相关的制作工具,也可按照开发团队的工作流程以及人员配备来制作。自主研发的方式可以让开发者充分发挥自由,量身定做属于自己的游戏引擎,不仅在技术具有自主的产权,也可以打造出独具特色的游戏,令他人无法模仿。
自主研发的方式,意味着游戏制作要从最基础的地方开始。这是一个从“无”到“有”的制作过程。毫无疑问,自主研发的方式是游戏开发周期最长的,失败的风险也是最大的。作为自主研发引擎的开发者,需要有足够的耐心和不屈的毅力才能坚持到最后环节。只有将游戏产品推向市场,获得玩家的认可才有可能看到回报。所以如果开发者选择这样的方式时,就要有足够的信心和毅力,做好准备,因为在漫长的游戏开发阶段是没有利益回报的,期待一举成名的美好夙愿是行不通的。
注意:
开发者不妨选择逐步去完善游戏引擎,先推出初期版本而不是一气呵成地去打造完美无缺的引擎。
开源引擎是通过将引擎的源代码在网络分享,以不谋取任何商业利益为基础,以公开发布的方式免费提供给开发者。开源引擎大多数是一些游戏爱好者将源代码在网络中分享。开源引擎最大的好处,就是可以让全球各地的同好者参与其中。人人都可以贡献自己的代码、可以协助测试引擎、可以书写样例教程。这也是开发者们喜闻乐见的一种方式。
开源引擎最重要的一点,就是分享精神。这就好比人类文明,是由几千年来的人们共同创造而来一样。这些开源引擎被暴露在大庭广众之下,人人都可以提出修改意见。在哲学上,有句名言“真理总是越辩越明。”很适合用来描述开源的游戏引擎。所以那些存在越为长久、被人们关注越多的游戏引擎,其完整程度更高。
游戏制作者可以免费使用开源引擎来制作游戏出售获取利益。开源引擎的存在为很多资金有限的独立或者小型的游戏制作团队提供了便利。市场上也不乏一些使用开源引擎制作的优秀游戏。
说明:
有些游戏引擎可能会经历三个阶段,从自主研发到收费授权到免费开源,比如Quake引擎和虚幻I引擎。这些开源的商业引擎,绝对是开发者初期学习的典范。
开源引擎非常适合快速开发的游戏产品,尤其是产品短小精干的移动平台为开源引擎提供了施展身手的舞台。据笔者所知,一些业界知名的游戏厂商,在移动平台也会使用开源引擎来制作游戏产品,比如Gameloft、glu、EA等等。开源引擎是基于自主研发和授权引擎之间的一种方式。首先,开源引擎免费开放了源代码和工具并提供了相关的技术文档,开发者完全自由地对其进行二次开发,来打造一款属于自己的游戏引擎。然后,开源引擎的存在缩短了开发周期,开发者不需要从零开始来制作游戏。这些都是开源引擎为开发者带来的便利之处。
而相反的一面,由于开源引擎是网络分享的,是许多人共同协作贡献代码产生出来的。这些人可能来自全球各地,使用不同的语言,具备高低不一的技术水平。这样的制作方式使引擎在性能和稳定性方面没有保障。在互联网上存在着许多开源引擎,质量也是良莠不齐的。开发者应尽量选择获得多数人认可的、更新频繁的、历史悠久的开源引擎。
说明:
选择更多开发者使用的开源引擎,意味着将会获取更多经验和案例。
同时,使用开源引擎的开发者,需要具备一定水平的技术实力来解决问题。开源引擎贫乏的技术支持,也是其缺点之一。它并没有完善详细的技术文档和范例,也没有制作人员来帮你解决问题。开源引擎的产生大多是出于制作者本身的兴趣和技术分享的精神来完成的。由于制作者时间和精力上受限,所以多数的开源引擎并不存在配套工具。
不过有一点是值得肯定的,那就是开源引擎在游戏技术的推广上起到了极大的作用。任何开发者在开始制作游戏之前都参考其源代码,从它们之中学习技术,汲取经验。开源引擎大多遵从某一个开源许可证。符合开源软件定义的许可证有GNU GPL、BSD、X Consortiun和Artistic等,它们之间存在一些细微的差异。
说明:
在使用开源游戏引擎之前,最好仔细地阅读一下协议声明。并不是所有的开源引擎都可以用来获利的。
无论如何,开源引擎的形式导致开发者投入时间较少。开源引擎与授权引擎之间,总是存在一道无法逾越的鸿沟。在功能、工具以及易用性上,开源引擎有所欠缺。不过其免费开源的形式,受到开发者的喜爱。而且随着技术成熟和协作开发,很多开源引擎也具备了丰富完善的功能以及详尽周全的文档。正如本书介绍的Cocos2D-X引擎,它甚至已经超越了授权引擎的水准,却仍然采用免费开源的形式分享给开发者。
相关资源:cocos2d-x游戏源码