经验之用Unity做《80 Days》PC版游戏移植

2014年,英国Inkle两人团队研发的叙事性手游《80 Days》被时代杂志评选为年度最佳游戏,除了好评之外,还取得了非不错的收入。而且在该游戏之前,Inkle的另一款游戏Sorcery也获得了数百万美元的收入。最近,负责PC版移植的海外独立开发者讲述了自己的经验和经历,以下是Ben Nicholson的完整博文内容:

当我一开始创办Cape Guy工作室的时候,就在iPad上发现了《80 Days》,我非常喜欢这款游戏,在收到了令人惊奇的twitter回复之后,我发现开发商Inkle的位置也在(英国)剑桥附近,我当时已经有了首个项目的计划,也已经开始了我的初创公司的打造,所以非常愿意早一点开始,甚至是连方向都没有定,这或许就是机智吧。

我一直都计划用Unity做一系列的大项目,到现在我还在这样规划着,不过这一次我发现Inkle和Cape Guy之间是有机会合作的。我给他们发了email,几天后我们在一个酒吧见了面,Jon和Joe都是非常不错的人,我们会面之后立即开始了合作的洽谈,一个小时之后,我们已经在谈用Unity做PC和Mac版本《80 Days》移植的话题了。Inkle本可以在PC市场发布一款游戏,他们也考虑了一段时间,我通过移植可以更熟练地使用Unity,而且不需要担心太多的游戏设计方面的问题。
 

经验之用Unity做《80 Days》PC版游戏移植


项目的开始

我们一致同意的是,大多数的移植工作都由我完成,但Joe负责Inklewriter的C#后端支持和阅读器。在项目的后期,Inkle还招聘了Tom Kail负责对话阅读器的前端UI,作为交换,我在此过程中把他培训成为了一名游戏开发者,有点像尤达和卢克,只是我并非绝地大师,我们也没有在沼泽里。

在项目开始的时候,我查阅了iOS版本的代码库,并且在粗略的估计这次版本移植大致所需的时间,我当时的预计是6个月。对于任何有游戏研发经验的人来说,听到移植版本实际上做了11个月的消息,可能都并不是什么让人惊讶的消息。

对于这个项目来说,以下这些东西都是未知的:

我对于该游戏iOS版本代码库所用的Objective-C语言的了解还停留在过去;手机游戏账号拍卖平台我刚开始用Unity做游戏编程而且没有写过任何的C#代码,只是我个人爱好编程而已(我之前的工作大多数都是使用C++);Unity当时在做他们的新UI系统,但彼时还没有发布,也没有宣布具体日期,《80 Days》这款游戏又需要做很多复杂的UI。

确定哪些移植、哪些重做

作为苹果平台的开发商,Inkle工作室特别喜欢使用MVC的做法,作为通常的方法,我直接移植了模型和控制器部分,而阅读器方面则使用Unity功能进行了重做和加强。然而,在某些区域,我在自己觉得有可能进行大量简化的地方重做了所有系统。

由于这款游戏对于外感的要求很高,所以最后我、Joe和Tom三个人用Unity功能重做了大量的内容(用的是Unity的新UI)。

从Objective-C移植到C#

我最开始完全是亲手做移植,所以慢慢熟悉了Objective-C的语法,虽然我从来没有打算这么做移植,但通过这种方式可以让我和Jon以及Joe一样熟悉这种语言的写代码方式,在手动移植的同时,我也在考虑自动化的方法,至少是其中的一些过程。我找到最佳的方案就是每次都把对话通过一个文件的方式用Automagical的工具传递到代码中,在此之后Automagical不能编译。

如果我是从一开始从无到有做这个项目的话,或许会尝试整个项目的自动对话都用Automagical来做,或者类似的工具专门用于单个项目。我或许还可以把游戏分成多个部分,可以进行单独调用和测试。

这个过程可能会占据更长的时间,Automagical在语法对话方面非常不错,但对于理解代码的语义就不那么好用了。一个程序员是必须可以把生成的代码衔接到一起的。如果你希望了解更多,可以到Automagical的官网查阅信息。然而,一旦初始对话完成之后,我认为做出一个可以运行的游戏所需的时间就会大大缩短。由于Objective-C的语法是非C++式的函数调用,所以手动做对话是一项非常耗人力也容易出错的过程,而这恰恰是计算机非常擅长的事情。

这种自动化的对话处理方式会导致大量所有人都不理解的代码库,而且随后再做大量修改的时候会非常困难,大量的渲染和路径生成代码都做了很大提升,界面也做的对PC更友好。大多数即时的视觉变化都可以在对话之后应用,至于哪个方法最终更快,我并不确定。我在做移植的时候所用到的主要方式是可以一次性把系统集成进去,并且使用自动化的测试框架,这个框架是我在学Unity的时候做的,确保移植过程中一切可以正常工作并测试。我还用Automagical做了小部分代码,然后加入界面改变过的现有代码。

特别指出的是,在做这个项目过程中我遇到最难的事情,在Objective-C中,把一个信息传达给null receiver其实没有做什么,而在C Sharp里对null reference调用一个method则会产生例外情况,这两种语言的差异也是在研发过程中主要bug出现最多的地方,解决bug很容易,只是过程很麻烦。

总结

总的来说,我觉得这个移植项目还是成功的,《80 Days》是一个非常有趣的项目,我们整个项目过程中都有很稳定的进展,用的时间比预计的长也并不意外,最终产品对于这个游戏来说是非常适合的。

 

上一篇:占座


下一篇:1042 最低票价