天天看點

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

對于獨立遊戲開發者而言,由于人手和資源的限制,往往會導緻很多想法和内容無法做到遊戲當中。不過,獨立開發者Sherveen Uduwana表示,隻要将每個項目積累的工具收集起來并不斷優化疊代,即便是單槍匹馬也能提升研發效率。

在2021年的GDC分享中,他詳細探讨了如何清理舊腳本、并且讓它們可以在多個項目當中使用,幫助同行們在沒有龐大團隊的情況下也能完成更大的遊戲。

以下是GameLook聽譯的全部内容:

Sherveen Uduwana:

我是一名做遊戲研發的自由職業者,目前在研發一款叫做《中秋(Midautumn)》的遊戲。之是以說我是自由職業者,是因為我不屬于任何一個具體的工作室,在從業生涯當中,我大部分時間都在跟不同規模的工作室合作,主要是做外包,有時候可能隻有一周,有時候會合作一個月,還有些時候可能兼職半年。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

遊戲業做研發有很多方式,但我的從業經驗是,每一個參與過的項目、做過的内容都可以幫助我成長,以便在後來更快地做遊戲研發,這也就是我今天主要想說的“代碼庫(Code Library)”。

這裡需要提前聲明的是,我隻是一個單槍匹馬的開發者,是以觀點可能并不适合所有人,如果你覺得本文的有些建議不适合你,隻要忽略就可以。我主要說的是幫我解決遊戲研發複雜度的工具,尤其是當你遠端工作、沒有人可以讨論的時候,是以,如果你也遭遇這樣的情況而且不知道如何解決,這裡可能會有些方法幫到你。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

做遊戲本身就已經是很困難了,我們不要把它變得更難。

我記得《寶可夢劍盾》釋出的時候,很多人說他們重複使用一些角色的模型,我對這樣的做法是支援的,因為在有限的時間内,你沒有必要給每個角色都做100種不同的版本。

是以有些東西是可以複用的,完成一個項目就已經足夠令人生畏了,在第一款遊戲的時候,你會學到很多不知道的東西,一旦完成,可能就會想要做下一款遊戲。

第二款遊戲的研發會更難,因為你已經知道了做一款遊戲都需要些什麼,而且也知道前一個項目做了什麼。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

如果你處于這個狀态,那麼我可以說的是,你現在比大多數開發者都有了更多的準備,就像是海上的蝙蝠俠,他已經知道了如何對付鲨魚。

我們也可以像蝙蝠俠一樣,遊戲實際上就是一些元件合成的鲨魚,你有需要解決的問題、植入遊戲的功能等等,你首先要準備驅鲨劑,也就是代碼表,然後做成能力腰帶(代碼庫),當鲨魚出現的時候,你就可以解決它了。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這裡我說的代碼庫,指的是一系列有幫助的資源,它們是可複用的,而且是可複用很多次。它必須在某個地方留有備份,而且不止是代碼,還包括所有能夠幫你的工具,比如喜歡用的軟體、設定檢查清單、文檔、經常看的視訊或者文章等等,這些都應該被加入到你的代碼庫。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

本質上來說,回到鲨魚的問題,在你的代碼庫裡,你想要所有的東西都能夠解決一個具體問題,而且是可以複用的。驅鲨劑隻能解決鲨魚,是以代碼庫裡的東西應該很輕、不需要大量的設定,還需要能夠很容易與其他東西組合起來。

如何維護代碼庫?

在代碼庫當中,你很明顯不需要整個項目的所有檔案、有些在其他項目中不會出現的内容。但是,如果有需要的話,你仍然需要能夠查閱這些資料。

還要注意的是,不要把不屬于你的東西放進來,有些時候某些資源給了你授權,但過段時間之後授權過期,這些東西也不适合放在代碼庫當中,因為它可能在未來給你造成麻煩。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

做代碼庫的基本流程就像是做家務,是以最好的時機就是完成一個項目之後、開始另一個項目之前。你要在舊項目當中尋找一些想要複用的代碼、資源,把所有隻适合這個項目的東西去掉,然後取一個容易記住的名字,放在能夠很容易看到的地方,確定你有一個檔案管理系統,這一點我們稍後再說。

主要提醒的是,不要想着把它做到完美,這隻是一個良好的習慣,每天可能隻需要投入幾個小時的時間。而且你可能會忽視一些東西或者将一些不必要的東西放進去,這都沒有關系,你可以在随後進行調整與修改。

我是如何識别代碼庫要放的内容呢?這裡是一個非鲨魚模型的遊戲解構圖:

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

它包括元件、核心内容、Meta機制和衍生系統。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

比如這張圖當中的象棋桌和棋子就是我所說的元件,在遊戲裡,就是角色、生命系統、實體效果、建築等等。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

核心内容包括遊戲管理器、資源系統以及資源掉落相關的功能,它們将遊戲元件變成了遊戲;meta機制就像是象棋錦标賽,向其本身是有規則的,但錦标賽還有自己的規則,這樣才能讓參與者不斷向上挑戰,相當于遊戲裡的進度系統、任務系統等等。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

接下來就是衍生系統,我把它比作錦标賽場地,這些建築可能并不是專門為了象棋比賽而建造,就像是遊戲裡的菜單、本地化、存檔系統等,無論做什麼遊戲,幾乎都需要這些東西。按照這個方式了解遊戲,你可能會更容易對能夠複用的東西進行分類。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

找到了這些東西之後,你可以把它存在版本控制平台,也可以存在各種雲端軟體。我是按照系統進行管理的,比如對話系統、菜單系統、存檔/加載和設定系統等。

當然,你還可以根據任務來管理,比如描述創意原型的腳本、動畫、資源創作等等,你可能會重複做很多東西,但也是不一樣的管理方式。

你還可以根據上面提到的遊戲結構進行管理,這對于我是很有幫助的,如果你覺得有用,也可以按照這種方式管理代碼庫。

案例

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

我将會用《中秋》作為例子,因為這個項目就是使用了我的“代碼庫”打造出來的。這是一款Roguelite遊戲,主題是亞洲離散文化,我已經放在了Kickstarter平台。

案例1:做一個能在不同項目重複使用的音效控制器

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這是我之前做的一個RPG遊戲,叫做《BlackCurrent》,當時做了一個音效控制器,,實際上隻是一系列的音頻剪輯清單,它有一些基礎的播放方式,我可以設定音量、場景,還可以随機播放腳步聲、對話聲、攻擊的聲音等等,它們隻需要被使用一次,而且沒有很複雜的設定。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

不過,在你的代碼庫當中,最好不要讓所有東西都隻能使用一次。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

是以我對它進行了調整,雖然看起來依然很像,但我增加了一些可能在其他項目想要使用的東西, 放棄了所有比較具象化的資源,比如腳步聲等等。

案例2:将同樣的對話系統拓展至不同品類

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這裡的案例依然是上面兩款遊戲,在《BlackCurrent》當中,我做了一些彈出的對泡泡,做《中秋》的時候,我加入了對話盒子,還在螢幕裡放了角色形象。

雖然表現方式不同,但它們的對話系統實際上是一樣的。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這是對話系統的整體腳本,包括對話内容、角色以及故事節點。

在《BlackCurrent》裡,對話是與玩法同步發生的,所有對話都是我寫的。遊戲裡有3D角色,他們可以移動而且會有角色動畫,對話泡泡會出現在說話者的上方。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

可以看到,在《中秋》當中,我做了比較明顯的變化,比如對話台詞是與角色資料、動畫和展示時間相連的,角色這一塊也改成了角色資料,包括了相關顔色、非對話相關資料等等;故事節點還設計了自動推進以及可以引入CG場景的信箱等。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

在《中秋》當中,對話推動了玩法進度,意味着事情是否發生會取決于你有沒有聽過特定的對話,我們做了程式化的對話池,是以每次對話都可能是随機的。對話盒子永遠出現在遊戲螢幕中的固定位置,每個角色都有一個高分辨率的形象。

每次有新角色出現的時候,我都要檢查與之相關的故事節點,你們可以注意到,我還增加了解鎖節奏、消失以及共存節奏等等,因為遊戲進度是對話推動的,是以你要知道玩家聽過了哪些對話、接下來要聽到什麼,哪怕是随機内容。

案例3:拓展通用敵人控制器,快速增加多樣化的敵人

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

做《BlackCurrent》的時候,我設計了一個通用的敵人控制器,很多都是通過比較虛拟的方式來定義,比如我想要做一個子職業的敵人,隻需要改變一個動作方式即可,如果不需要,就使用預設行為。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這個控制器涉及很多的方面,比如敵人重生的方式、如何選擇下一個狀态,以及行為的更新、攻擊方式和死亡等等。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

如果仔細觀看,你們可以看到敵人攻擊的時候都是有特效的,包括近戰攻擊,所有類型的敵人都具備這個能力。我還為敵人增加了标簽系統,比如圖中的烏龜,當你攻擊的時候,它們的殼會承受傷害,而本體不會受到傷害,意味着你是無法攻擊到它的。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

我用這個系統做的第一個敵人是簡單的近戰敵人,它會慢慢接近玩家,到一定距離之後就會發起攻擊。當我做新敵人的時候,增加了兩個标簽:近戰、遠端。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

實際上,這兩個敵人的健康值、外觀和攻擊方式可能不同,但它們實際上都用了同樣的Spirit。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

随後我增加了帶盾的敵人,它的主要變化是可以用盾承受傷害,不過最有趣的是,我可以在此基礎上做更困難、更複雜的敵人類型。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

做完三種敵人之後,我開始做遊戲boss,因為有了這些方法之後,你實際上可以很快做出獨特的Boss。在帶盾敵人的基礎上,我增加了選擇下一個行為的射擊,還做了不同的攻擊方式以及承受傷害的反應,比如生命值減少一半之後會進入狂怒狀态,在Boss死亡的時候,我隻是增加了對話腳本,增加了新的Boss标簽。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

接下來我做了第二個Boss,因為這麼做很容易,仔細觀察,我們會發現兩者的核心邏輯是一樣的,當然還做了很多的差異化,這裡不較長的描述。最大的不同在于,新Boss增加了更多的劇情,比如它的目标和動機,還做了不同的擊敗對話。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這是完全不同類型的敵人,因為做了兩個Boss之後,我在想如何做出新的敵人類型。這次我加入的标簽是“更新”,比如一開始它可能隻是個小蘑菇一樣的怪物,更新之後變的更強大。

這個怪物的設計也沒有用很長時間,我隻是改變了敵人行為、攻擊方式并且增加了一個新标簽。它會主動更新,如果還沒有更新,就會尋找可以讓它更新的資源去吃掉,更新之後的攻擊方式也會變化。

這裡比較大的差別在于增加了更新和降級兩種方式,後者還沒有使用,但如果有需要也可以加入,比如更新後的敵人遭受足夠傷害之後降級、能力變低。

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這是今天說的最後一個敵人,是一個可以有毒的敵人,如果玩家離它們較近,敵人就會被動釋放有毒粒子。我隻是更新了它的攻擊方式,增加了有毒标簽,實際上每次做新敵人大概都隻需要用一個小時左右,因為有了這個控制器之後做起來其實很簡單,我隻需要思考如何将敵人類型多元化就可以了。

代碼庫有哪些優勢?

1.快速創意原型

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

有了這些代碼庫之後,它給我的研發帶來了很大的幫助。比如在創意原型階段,我在做自己遊戲項目的時候,依然可以每周抽出40個小時做外包,而且每一個創意原型所用的時間和精力都變得更少了。

通過這種方式,也可以降低沉沒成本,比如你可以嘗試更多的創意原型,如果覺得行不通可以立即停掉,不會造成特别大的損失。另外,這些代碼庫也讓我在使用Unity引擎做研發的時候更加舒服,特别是你沒有團隊支援的時候,就特别需要有工具提升研發效率。

2.快速分享版本

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

另一個幫助是共享,比如創意原型做了一周之後基本上就可以玩了,雖然可能并不有趣、也不是很好,但我可以通過代碼庫裡的很多功能對它進行測試,有了更多時間做debug,而且可以第一時間分享給其他人。

通常來說,你是沒有那麼多時間在創意原型階段做這些的,但有了菜單、存檔等比較成熟的子產品,我可以直接把可玩版本發給其他人測試,尤其是去年,大部分人都遠端工作的時候,這可以帶來很大的幫助。

3.更容易做可達性

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

還有一點要說的是可達性,當你在項目一開始的時候就做這樣的功能,那麼真正開始研發的時候就會很容易做出來。比如色盲測試、高對比度模式等等,在随後的項目中,如果你有時間,就可以做的更具體,如果沒有足夠的時間,就可以複用以前的資源、功能和系統。

4.擴大遊戲内容

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

這樣做還可以讓你的遊戲更豐富,有更多的時間做遊戲設計、美術和劇情,還能夠嘗試和疊代更高優先級的功能。有了這些工具,你可以用已經有的研發工具加速内容制作。

5.更容易幫助别人

獨立開發者分享:如何建立自己的“代碼庫”、讓新項目研發更容易?

有了這樣的代碼庫,你就可以很容易給朋友或者同僚提供幫助。遊戲業是一個很小的圈子,彼此分享是非常好的。如果我沒有這些,當有人問我怎麼做某個功能的時候,可能我就要查詢很多的代碼,要投入大量的工作。另外,當我做其他項目的時候,比如做外包,有了這些資源,我就可以參考自己的工具幫他們解決bug,按時完成你負責的部分。

當然,如果你有足夠多的時間和資源,也可以從頭100%重做一個項目。但我從業過程中感覺最好的時刻就是,有人說,在新項目當中,他竟然沒有看到有些東西是前作遊戲裡出現過的功能,是以這就是代碼庫的作用。

實際上,遊戲就是由不同的輪子、或者說鲨魚組成,我希望這種預先準備的工具能夠讓你未來的項目更順利、研發更有效率。

····· End ·····

GameLook每日遊戲産業報道

全球視野 / 深度有料

繼續閱讀