前往
大廳
主題

《守護之心》開發歷程回顧 - 7th DIY Game Jam

放課後的遊戲 | 2023-08-19 03:41:30 | 巴幣 1116 | 人氣 164

簡述

大家好,我是放課後的遊戲,一名去年底才開始學習遊戲開發的遊戲開發者。
偶然在DC上看到 DIY Game Jam 的活動消息,想說來參加看看也順便認識新朋友,所以就自己一個人獨立報名參展,並且交由主辦方進行分隊。
最早看到活動公布的主題「愛」,我預期成品應該會是文字冒險遊戲,但因為我個人對於劇本這種文字內容的掌握程度實在不高,只能期待分配到的隊友能夠有人擅長此類內容,而自己主要就是負責將整個遊戲的對話框架做出來,以及確保場景切換順暢即可。
沒想到在第一次與隊友們開會時,倒是沒有人提出類似的遊戲內容,從最一開始提出的遊戲方向就是《茶杯頭》(Cuphead) 這種動作冒險類型的遊戲,最後根據劇本負責人 太一 提出的遊戲玩法影片,考量到開發時程以及開發難易度,改以《吸血鬼倖存者》這種近期開始流行的倖存者類型遊戲玩法為主體,輔以一個準備大廳來呈現劇情與供玩家升級屬性。
恰巧我手上已經有一個當初參加遊戲開發課程時所開發的倖存者類型的遊戲雛形,所以在我們第一次開會決定好遊戲主軸後,就能夠馬上開始進行開發作業,並進行程式分工(我們這組有三名程式開發人員),也因此才能順利在一個月的開發期內順利完成此次活動作品。

開發歷程

誠如前面簡述所提到的,遊戲主體是建構在我以前開發的遊戲雛型上,因此在開始後續的開發前,必須先釐清現有的遊戲雛型與要完成的遊戲內容有哪些差異,以利後續的程式分工進行。

我們首先將整個程式拆分為兩大部分,準備大廳與遊戲場景。
準備大廳就是讓玩家展演劇情內容、購買升級選項、選擇要帶進場的武器(最早規劃玩家是可以主動挑選要帶進場的武器,後面因為覺得流程很卡、遊戲平衡等等就拔了)、進行關卡的選擇(原本有打算做,後面時程趕不上就算了)
遊戲場景,也就是玩家主要遊玩的地方,這地方的機制很多都在雛型已經實作一定內容了,主要需要重頭寫過的玩家的武器機制,原先雛形的攻擊模式是比較接近《黎明前的20分鐘》這款倖存者遊戲,玩家會持有一把在準備大廳選擇的武器進場,之後會隨著滑鼠位置進行瞄準,左鍵點擊開火,也就是需要玩家自己進行瞄準及開火的攻擊機制,並且只支援一把武器的存在。
而我們要實作的目標的攻擊模式,則是玩家會在升級的時候選擇各式不同的武器進行攻擊,且所有武器都是自動瞄準、自動攻擊的,因此這部分也是要整個重製的。
至於剩下的玩家控制系統、升級系統、怪物生成系統、地圖生成系統、玩家傷害控制系統、怪物行為樹等系統都是有一定的基礎雛形,基本都只要部份調整並確保沒有惡性 Bug 存在即可使用。

釐清差異後,因為我們有三個程式開發人員,為了避免程式併版產生衝突,所以我們將程式盡可能的依功能拆分,然後同一功能就完全由同一個人去開發,以減少衝突發生的可能。
  • 太一 負責建構準備大廳的 UI 介面、大廳的升級系統、整體的劇情演出還有整體遊戲的劇情內容。
  • coffeewine 負責建構完整的對話系統、存檔系統、武器系統。
  • 我則是負責調整剩餘系統內容,替換美術及音效素材,並串接其他人的開發內容至遊戲內。
剛開始我想說,我負責的工作大部分都已經有既定的內容了,要修改的部分應該沒很多,只要檢查是否有沒發現惡性 BUG 和替換素材而以。
結果開始改之後才發現各種技術債要處理……
我們使用範本是我課程中的作業,所以其實裡面的很多內容都不是很成熟的解決方案,充其量就是能動而已,程式的可讀性非常差,如果只有我自己一個人開發可能還算不上什麼問題,但因為有其他人要一起共同開發,所以為了維護方便我還是得把一堆內容重寫成大家容易看懂跟維護的內容。
至於為什麼這點很重要,一個實際的情況就發生在太一負責的準備大廳的升級系統,原先的大廳設計其實就有包含一部份的升級機制,但我的設計估計可能只有我自己能看懂……所以太一在寫新的大廳的時候還是重寫了一套新的升級機制。
接著是遊戲主體內容,原先的寫法程式耦合性非常高,幾乎是只要動了一個東西,整套系統就會報錯,然後每隻程式都又臭又長,很大一包……
為了解決這個問題,我先將程式分割,盡可能維持一個功能一隻程式的樣態,光原本的一支 PlayerController 我就拆分成了 MoveController(玩家移動控制)、(攝影機控制), PlayerDamageController(玩家受傷控制), WeaponController(玩家武器裝載控制) 三之程式去分別處理原先的內容。
接著改寫及拆分原先的遊戲狀態機程式,原先的程式寫得十分不好用,要在 GameManager 中的 Awake() 階段時在每個要使用到狀態機的程式先共同賦予狀態機的參數,否則無法順利使用狀態機。
後面改以單例模式去撰寫狀態機的程式碼後,可以省去很多賦值的麻煩,同時讓程式看起來會直覺許多。
其他還有像是怪物生成系統、地圖生成系統、怪物行為樹、升級系統等等,雖然都是原先就有的系統,但為了後續能夠更便於維護及開發,也都是重新改寫了程式架構。
唯一沒有異動的內容大概只有音效設定的頁面程式,其他幾乎都是有改過甚至重寫的。

心得

之前我也參加過一次 Kuso Game Jam 的實體開發活動,這次雖然是線上的活動,但因為開發時程比較長,所以收穫的內容比我想像中還多一些。
前面提到的改寫程式架構那些,雖然過程很煩也很累,但改完之後確實程式在開發上便捷不少,其中我也把不少改動內容移植回原先的範本專案內做為更新內容。
此外也學到不少 Unity 的開發內容,像是透過調整 Animator 的 applyRootMotion 設定,可以讓動畫即使在 timeScale = 0 時也能順利播放;或是 Unity Event 在程式中的使用方法等等。
而且也是我第一次與多名程式開發者共同開發一款遊戲,前一次的 Kuso Game Jam 只有我一個程式人員,其他都是美術、企劃等人員。
多名程式開發者雖然容易有一些程式風格不同而發生意外,但也確實能夠找出自己平常開發不會遇上的盲點,確實能夠有效增進自己的開發能力。

最後,開發遊戲有可以配合的美術人員跟音效人員真的好讚喔!


成品網址 - 守護之心

創作回應

更多創作