使用Flash, HTML5, Unity进行web游戏开发的现状对比

原文地址:http://www.photonstorm.com/archives/2568/the-reality-of-developing-web-games-with-flash-html5-and-unity

如有翻译不对的地方敬请指正,转载请注明出处,谢谢



对于全世界Flash开发人员来说,今天是黑暗的一天。Adobe宣布将放弃对移动设备浏览器上的Flash进行技术支持。而在这之前,Adobe刚刚宣布了要对公司进行大规模的裁员。虽然表面看起来这似乎并不是什么严重的问题,但是这可能会使大家重新开始憎恨Flash。所以我觉得是时候把我的想法发到blog上了。


首先,我只关注web游戏开发。所以整篇文章都只关注这一特殊的主题。这不是一篇“Flash vs. HTML5”的文章,也不是一篇讲述如何为移动设备构建本地apps的文章。这篇文章只是纯粹的关注于当今web游戏开发的现状。

这里,我对比了Flash,HTML5和Unity,因为它们是目前唯一能可行的web游戏开发平台。我列举了以下10个方面来对比它们:

  1. 开发流程(Workflow):如果真正创建一个游戏,它是否足够简单?
  2. 平台稳定性(Platform Stability):当你从开始到结束开发这个过程中,它会发生变化么?
  3. 向后兼容性(Backward Support):你的游戏能够一直运行10年么?
  4. 移动支持(Mobile):你的游戏能在移动设备上运行么?
  5. 分发(Distribution):如果没有人玩,那么你的游戏没有任何意义。
  6. 安全(Security):代码和知识产权的保护
  7. 盈利(Monetization):开发游戏的目的就是为了挣钱
  8. Facebook:社交游戏的角度
  9. 有多少人会玩你的游戏
  10. 3D支持(3D Support):Stage3D vs. WebGL vs. Unity

我认为这些是每一个游戏开发人员在评估一个新平台时都应该考虑的方面。为使用Flash进行游戏开发的新手和熟手总结了一些我的建议。

这篇文章很长,但是很重要,我希望尽可能多的覆盖到相关知识点。文中我尽量使用事实和统计数据,而不是夸张的语句,从而使你能够做出最好的决策。


技术分解

1. 开发流程(Workflow)


Flash:使用Flash来创建游戏很简单。现在有数不尽的数据,网站,教程,游戏框架,开发库,视频和示例代码。对于开发工具,你可以使用免费的Flex,也可以花钱购买Flash IDE。Flash具有通用并且非常强大的矢量渲染功能,这意味着你能够创建文档尺寸很小的动画。它拥有非常成熟的音频支持,并且大多数Adobe应用程序,比如Illustrator,Photoshop,都能够集成到Flash IDE当中。而且经过多年的开发,它还拥有很多内置的功能。


HTML5:像JetBrains Astella这样的编辑器使得编码不在痛苦。还有一些很好用的debug工具,测试时只是简单的启动浏览器就可以了。现在也有大量的讲HTML5游戏开发的书籍,网站,线上资源以及示例代码。用于创建HTML5游戏的工具是免费的,但是同样还是有一些商用的游戏开发软件,包括GameMaker HTML5和Game Salad. 如果你希望能够更加快速并且更少的涉及底层原理时,还有一些专门用于游戏开发的库供你调用,比如ImpactJS。

Unity:Unity拥有一个非常优秀的Visual Editor并且集成了主流的3D应用。家庭使用的basic版本是免费的,你也可以在公司使用它,每年需要缴纳不到100k美元的费用。专业版售价1500美元起,随着集成不同的插件而增加相应的价格。一旦你购买了该软件,便会提供给你大量可用的书籍和学习资源,所以学习应该不是问题。

2. 平台稳定性(Platform Stability)

Flash:构建在Flash平台之上的游戏是操作系统无关,浏览器无关的。它不会关心是老旧版本的IE还是最新版本的Chrome,对于提供了Flash Player的平台来说,这些体验是相同的。Adobe每年通常每年都会发布一个新版本的浏览器,在一年之中也会发布很多更新。


HTML5:HTML5处于一个持续变化的状态。这种情况下会产生两个副作用:第一,有可能因为浏览器升级导致你的游戏不能正常运行;第二点,你不能只关心一个平台,你需要关心很多个平台。使你的游戏能够正常工作于Chrome仅仅是个开始,你需要忙于IE,Firefox,Safari,跨操作系统,浏览器发布版本树中的各个版本。维护代价同样不能低估。最大的技术挑战是包括音频支持,渲染速度不一致的问题。


Unity:Unity的web player与Flash具有相同的优点。在提供了插件的平台上,你的游戏可以运行的很好,而不用去关心浏览器。Unity本身也是在不断的改进过程当中。

3.向后兼容性(Backward Support)


FLash:十年前使用AS1开发的游戏仍然可以运行在现在的Flash Player 11上。对向后兼容的支持是非常优秀的。


HTML5:对于HTML5来说,进行向后兼容性的对比有一点不公平,因为HTML5一直在不断改进的过程当中,这意味着,如果有一些东西不符合W3C标准的话,那么它很快就会被废弃掉。


Unity:Unity并不能够向后兼容,原来我以为它会像Flash一样能够向后兼容,但是目前来看,似乎并不是这样的。

4. 移动支持(Mobile)


Flash:目前为止,除了iOS以外的移动设备对Flash插件都支持的很好。但是Adobe官方已经宣布Flash插件不再对移动设备进行支持。所以对于移动支持这一点,已经完全不用考虑Flash了。你也许可以通过AIR来创建移动应用,但是这并不属于web游戏,已经超出了本文讨论的范畴。Stage3D也不在本文的讨论中,随着很多硬件厂商/运行商的合并,已经逐渐过时的AVM,对于Adobe来说,这仍然是一场艰难的战役。另外在Adobe公司进行结构调整的过程中,公司将Oliver Goldman从AIR团队调整到了云项目中。Oliver在AIR团队中是绝对核心的人物,对于这种事情就看你怎么理解了。


HTML5:HTML5对移动设备的支持越来越强,在iOS5上看到了明显的性能提升。随着移动浏览器能够访问到一些诸如触摸事件,加速度事件等特性,我能预见到HTML5将会越来越好。当然,你还是必须面对不同的屏幕分辨率等问题,但是这些并不是HTML5特有的问题。


Unity:目前没有移动设备的浏览器支持Unity插件,因为Unity的强项在于开发移动设备上的本地游戏。


5. 分发(Distribution)


Flash:Flash游戏可以打包进一个单独的,容易进行保护的SWF文件里,这个文件可以通过站点上的HTTP协议进行传输。也可以绑定到一个专门的URL上。Flash游戏商店完全是根据游戏的发行量来进行运作的,实际上,你的游戏发行的越广,你挣的就会越多。


HTML5:目前没有一个跨平台或者一致的方式来打包HTML5游戏。最大的游戏门户网站还不允许开发人员上传自己的HTML5游戏。我觉得这可能是因为需要调用外部的js文件可能会导致一些安全问题。这意味着HTML5游戏只能够通过特定的URL进行传播或者嵌入到一个iFrame里。最终可能由你或者你的赞助商来为你购买主机。很多Flash游戏的传播方式都是一些网站首先在门户网站上下载SWF文件,然后放到自己的主机上。这其实并没有听起来这么糟糕,实际上这正是多数Flash游戏开发者赚钱的方式。网站允许使用设置了sandbox parameter参数的iFrame,但是这回阻碍HTML5游戏使用一些像本地存储,访问表单等很有用的特性。


Unity:Unity与Flash和相似,可以把游戏打包成一个单独的文件,然后能够将它上传到像Kongregate这样的网站上。

6. 安全(Security)


Flash:虽然SWF文件并不完美,但是至少它会把你所有的资源文件和代码打包到一个文件中,这个文件需要对打包技术很了解或者使用第三方应用程序进行破解。市场上有很多文件保护服务和代码混淆软件可以对SWF文件进行保护。通常这基本可以抵御业余的黑客和盗贼。


HTML5:Html5游戏的代码可以混淆,但是不能使用任何没有加密的客户端进行加密。代码在内存当中运行时,很容易被改变。图形和音频资源很容易被盗用,可以使用Chrome或者Firefox浏览器的查询对象功能进行查看,甚至直接通过缓存文件夹进行浏览。这个问题完全依赖于你的游戏和你的客户。评论中有人认为有很多方式来保护HTML5的资源,并且他认为FLash中的资源文件也会像HTML5中的资源文件一样容易盗取。我不想开始参与文件保护的辩论,但是我想说任何保对HTML5中资源文件进行保护的方式都可以用于Flash中。


Unity:与Flash很相似。如果有人下定决心准备盗用你的资源文件的话,那么他一定有很强的技术功底。总的来说Unity可以防御一些业务黑客和窃贼(source)。

7. 盈利(Monetization)


Flash:Flash游戏有很多很好的方式来盈利,包括:游戏赞助,游戏中植入广告,与门户网站进行分层,广告分层,游戏交易以及为客户进行打工的游戏。我认识一些开发人员,他们完全不需要赞助商,游戏分层和广告收入分层同样可以给他们带来现金。网络中有很多发布广告的API,甚至只需要简单的上传你的游戏,就能够长期的参与分层。


HTML5:可以在游戏中植入广告,比如在游戏中放入Google的广告。我目前还没有发现任何形式的HTML5游戏赞助市场,或者是收入分层的形式。像Fortumo游戏交易的形式存在并且已经很健全,当然你也可以专门为客户开发HTML5游戏。


Unity:我对这点知之甚少,希望能有读者为我补充一些。我期待会有一些广告API,尽管Unity的目标是移动设备而不是Web。

8. Facebook


Flash:大多数Facebook上的游戏都是由Flash开发的。Sims社交网络每月有3600万玩家在玩Flash游戏。新版的水果忍者也是Flash开发的,并且他们还宣称即将使用Flash Player 11上的新特性。大部分的Zynga游戏也都是Flash的。原因很简单,因为他们很容易雇佣到Flash开发人员和使用简单的开发流程。开发人员很容易直接通过Facebook来赚钱,因为Facebook提供了很多第三方服务和API。


HTML5:我努力寻找一些使用纯HTML5开发的顶级的Facebook游戏,一定会有一些的,所以如果你知道的话,请贴上链接。Zynga在2010年就收购了Dextrose,准备在Facebook上开发HTML5游戏,但是至今也没看到什么结果。原来的文章提到“已经有一些游戏公司宣布准备在Facebook上发布HTML5游戏,比如OMGPOP和他们的Gem Rush。每日用户量只有10人。”但是有读者提到Gem Rush只是使用了HTML5的API,而游戏本身是Flash开发的。因此我的结论是,目前为止,Facebook上的主流游戏基本还都是Flash的。


Unity:Unity游戏在Facebook上似乎也有一些盈利。这些游戏并不像Flash一样无处不在,但是同样还是获得了很好的支持。像 UberStrike (每月有83万玩家)以及King’s Bounty (每月两万玩家) 等游戏,显示了如果游戏有足够的吸引力,Facebook用户并不反对安装Unity插件。

9. 有多少人会玩你的游戏?


Flash:事实上,由于桌面用户量是巨大的,而且每一个访问访问互联网的用户都可能玩你的游戏,所以这个统计量是巨大的。一个标准的Flash游戏大概在第一年会有差不多2~3百万的用户访问量。一些比较好的游戏访问量要比这还多。我们的游戏Home Sheep Home从发布以来每天大概有100万的玩家。上线之后的18个月内,大概有1亿零8百万用户访问玩过这游戏,玩家数量惊人。加上Facebook上的巨大的玩家群,你可以想象这一秒中就有成百上千的人在访问你的游戏。玩家完全不是你的问题。


HTML5:老实说,我确实没有找到相关的数据,可能是因为技术还是太新了。也没有用HTML5做出来的好游戏。很高兴的看到了读者提供了一些链接。技术上你可以认为潜在的用户群为十亿以上,但是我还是试图让用户自己挖掘有多好玩家。


Unity:虽然Unity宣布了他们玩家的占有率,但是并没有统计数据来支持它。如果你统计Kongregate上的Top Unity Game,你会发现总共只有577,000个玩家,而顶级的Flash游戏有2500万玩家。实际上前100名的Flash游戏玩家数量全部都在250万以上。

10. 3D支持(3D Support):Stage3D vs. WebGL vs. Unity


Flash:Flash Player 11引入了Stage3D,它本质上市OpenGL ES 2.0。Adobe为了实现它,进行了专门的工作,但还是有很多需要注意的地方。首先,在嵌入游戏时需要使用wmode=direct参数。多少主要的游戏网站目前并不支持这个参数,所以如果你的网站没有设置这个参数的话,你的游戏不会再3D硬件上执行。其次,令人沮丧的是黑名单上的GPU并不支持Stage3D。2009年以前的驱动程序都无法支持。最常见的就是Intel GMAs(on-board graphics chips)也无法工作。2007年销售的PC机种有90%都使用了Intel GMAs。当然Adobe必须在这之间做出一些选择,但是Flash吸引人的地方就是平台无关性,所以如果你使用了Stage3D,这就意味着你放弃了很多潜在的玩家。所以,你必须谨慎的选择这条路,而且,当你选择这条路的时候你应该确保你能够盈利。


HTML5:选择HTML5的话,我们可以使用WebGL。它与Stage3D在技术层面上很相似,它是通过纯粹的OpenGL接口实现的,但是它在一些关键领域存在一些缺点:不能够全屏(实际上Firefox刚刚宣布了支持HTML5全屏模式—译者注),不能够捕捉鼠标(Flash Player 11.2已经支持),不能够多重渲染目标等问题。Autodesk Blog上有一篇文章很好的讨论了这些问题。这些都是短期的技术挑战,很快就能够克服。WebGL的最大问题是MicroSoft目前并不支持它。MicroSoft不是WebGL工作组的成员,而且也不对WebGL的格式提供任何支持。根据浏览器使用量的统计来看,IE仍然占据主要地位,而且统治地位不会再短时间内改变。


Unity:Unity同样也支持3D。在我们有限的测试里,我们的游戏能够完美的运行在那些不支持Stage3D的黑名单里的GPU上面。当然,你同样面对着插件问题。当然,如果你认为你有足够好的市场,那么Unity是目前最好的3D解决方案。Unity宣布,他们很快会支持将Unity游戏导出到Flash中,但是并不会遇到Stage3D的GPU黑名单的问题。我很希望付钱给Unity,让他们在不久的将来支持将Unity游戏导出到WebGL。




Adobe会支持Flash多久?


让我们来重点关注一下Adobe今天发布的新闻中的一些片段,我删除了一些无用的内容:

我们已经着手开发Flash Player 12…我们也会加快与W3C和Webkit之间的合作,尽快的给HTML5带来相似的功能,我们将会为Flash开发一个新的功能,使其能够平滑的过度到HTML5

他们也声明了Adobe认为Flash Player主要用于“高端游戏”和“高端视频”领域。

你可以以各种角度来理解它。一方面,这听起来好像是,所有即将给Flash添加的新功能都会提交给W3C和Webkit团队,这样,我们就能看到这些功能被添加到HTML5当中。另一反面这听起来又好像是,他们将会修改FLash IDE,使得它能够构建HTML5的项目,而不是导出成一个SWF文件。所以有可能我们会看到它制作的动画会到处成SVG和Sprit Sheet。


Thibault Imbert今天的博客说我们应该明白,放弃Flash对移动设备的支持是一件好事,这将使得Adobe更加专注于AIR和桌面版的Flash Palyer,显然没有人会使用Flash为移动浏览器上构建任何应用。我并不反对他的观点,但是我觉得问题是双重的:首先,人们会认为Adobe正在销毁Flash,“移动”一词很有可能被感官主义者从新闻头条中漏掉,这只会是反对Flash的火焰随着苹果公司的点燃而燃烧开来。尽管如此,我最大的问题是:是否有人为移动设备开发Flash游戏者并不重要,但是重要的是把移动设备上的Flash插件移除,这强制灌输一种思想,web是一个缺少Flash的领域。


智能手机市场确实非常巨大,并且目前手机游戏的数量要比掌机游戏多的多。很多人不会再玩你的Flash游戏,这回在客户群中产生碰撞效应。一些已经动摇的客户逐渐意思到,他们网站上的任何Flash元素(游戏,视频,交互)都无法在iOS上运行时,他们会更加害怕这些元素很快也无法在除了桌面以外的其他设备上运行。你可能不在意放弃支持iOS时带来的一点小损失,但是你绝对不能忽略那上百万的用户。


这对于我们来说可能不成问题,因为我们永远都不会为移动设备开发Flash游戏。 But you don’t upset the apple cart like this without bruising all aspects of the Flash world in the process.(这句没明白,大意是说会对动画界产生很大的影响)。


可能他发表的结论当中最打击人的是这部分:

长远来看,我们会继续为了Flash雄心勃勃的未来而努力工作,正如我们今天说过的,实现的细节可能有所改变。我们相信Flash的DNA并不是在这些实现的细节里,但是我们保证,我们会努力使得Flash能够更加简单的创造出最多的令人惊艳的用户体验。


这是一个对外的解释,但是从官方发布的消息来看,我觉得Adobe自己都觉得看不到Flash Player插件在桌面应用上的未来。我希望能够看到从AS3到JS的跨平台编译的尝试,或者一些本地的JS和SWF之间的相互调用。如果有足够多的Flash Player特性得到Webkit的支持,那么将AS3导出到HTML5将会更容易一些。


我确信AIR仍然会继续存在,这是游览器插件的未来。

Flash开发人员应该做些什么?


认真考虑,停下来并评估现在的局势。


Flash还没有死,而HTML5也没有为真正用来做web游戏开发做好准备,我指的是那种真正用来赚钱的游戏。我们正在经历一个转变的时期,现在很可能是Flash游戏的顶峰。现在有比以往任何时刻都多的Flash游戏发布,这应该是一个印证。我看到了又HTML5的游戏正在逐渐向我们多年前创建的一些游戏靠拢,当然,目前看来还不要紧。


当然,这都是书面上说的。Flash Player插件像绑了一根有很长导火线的炸弹一样,他正在燃烧。


我期待HTML5逐渐蚕食Flash游戏的低端市场。它还没有足够的能力替代我们今天创建的所有Flash游戏。但是它可以很容的从低端游戏做起,那些不太复杂的,更容易构建的游戏。发行和盈利的方式可能很多,但是我们希望能够为那些坚持使用HTML5的用户建立这些新游戏。这种情况发生的越多,HTML5侵蚀的就越厉害。


在刚才的第10点中,我们对讨论了Stage3D vs. WebGL,但这只是由于WebGL本身存在一些短期的技术问题以及MicroSoft的立场问题。听起来好像是不能解决的问题,但是他们已经改变的方向(Silverlight?),并且IE已经逐渐被淘汰。也许淘汰IE需要很多年,但是这正在发生。

我的意见


如果你是一个初级开发人员,那么你完全没有必要担心这些。继续学习如何使用Flash开发游戏,因为游戏开发过程当中使用的技巧是通用的。你将会遇到的逻辑问题,以及你需要关注的处理池和用于行为很少是特定与某个系统的。你学到的东西是各个环境中都通用的。现在,你开发了一个Flash游戏的话,你很容易把它卖出去,并且会有很多人来玩你的游戏。这将会提升你的信心。完成你的任务比选择平台更加重要。


如果你是一个游戏老手,那么,继续做你在做的事情,并经你需要挣钱。继续创造那些令人惊奇的游戏,并陶醉在百万玩家享受你的游戏的喜悦当中,当然还会在这些客户中赚钱。

但是与此同时,你应该开始学习Javascript和HTML5。(或者你不能忍受的话,可以开始学习Unity)


你不知道写下这个句子的时候我有多么的痛苦,从AS3到Javascript是倒退了一步,无论你如何编写。


那么为什么还要花时间来学习Javascript呢?因为我不相信我们能够看到一个工具可以将AS3转换成HTML5,只是不能将游戏转换的足够好


那么,如果聚会结束了,Adobe开上了大门,你希望你是那个手上握有开门钥匙的人么?

深入阅读


Ben在Playtomic写过一篇很好的文章,主题是Flash游戏开发人员如何扰乱游戏网站目前的状态。


Grant Skinner在为移动设备上的Flash Player举行葬礼时分享了他的想法。

更新—–新的链接和文字


这里收集了一些值得阅读的新闻链接,这些都是在我发表本文时发生的新闻。


黑莓(Blackberry)宣布他们将会继续支持Flash,但是他们在总结全文的时候,推荐大家去学习HTML。


Pritham Shetty,Adobe视频解决方案的副主席,发表博文声明Adobe将会继续支持桌面版的Flash。但是没有说具体会支持多久。


Ben Forta是Adobe公司Evangalism平台的主管。在他的博客中,他回顾了Flash对web发展产生的帮助。这篇文章写的很好,但是有超过25个评论强调了现状。


看起来在Adobe结构调整的时候,将Oliver Goldman从AIR团队移动到了云项目。他是AIR团队的关键人物,对于这件事,仁者见仁智者见智。


R Blank写了一篇叫做“消息失败的案例学习”的文章,提出了一些很好的点。


Mike Chambers澄清了整个Flash专业版IDE团队都被解雇了的传闻。他们仍然在Adobe开发IDE,但是听起来他们好像现在更加关注与HTML5的内容。还有一个很令人困惑的消息是,我在他的blog上留言问一些IDE未来的发展情况,他只是简单的说“你今天使用Flash做的很多东西,未来都可以用HTML5实现。”我很感激他的诚实,但是并不嫉妒他的职位。


Doug Winnie是一个被Adobe解雇的社区经理,他的文章热情,温暖又令人苦恼。看完他的文章你好像只有两个感觉:1)他不应该被解雇,以为内很难找到像他一样有激情的;2)他揭露的事情是难以置信的。

你可能感兴趣的:(html5,flash,unity,游戏,web)