經驗:我是如何用Unity做[80 Days]移植的

【Gamelook專稿,轉載請註明出處】

Gamelook報道/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,而且不需要擔心太多的遊戲設計方面的問題。

6

項目的開始

我們一致同意的是,大多數的移植工作都由我完成,但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》是一個非常有趣的項目,我們整個項目過程中都有很穩定的進展,用的時間比預計的長也並不意外,最終產品對於這個遊戲來說是非常適合的。

作者介紹:在成立Cape Guy之前,我用瞭11年的時間在不同的工作室做不同的遊戲相關工作,在索尼的倫敦工作室、Rocksteady Studios以及Frontier Developments等公司分別擔任過物理學、玩法、引擎和主程等職位,從事過的項目比較知名的包括《蝙蝠俠:阿卡漢姆瘋人院》和《蝙蝠俠:阿甘之城》,除瞭做蝙蝠俠之外,我還做很多有趣的物理物體,比如繩索、毛發、液體和爆炸效果等等。

Comments are closed.