很常聽到在專案開發初期,做功能最好是「先求有,再求好」。在發覺做了兩個月的白工後,才體會到這句話的意思應該是「先求有,以此為基礎,再求好」,而不是「先求有,之後再做一個全新且更好的」。

cover-image

發現白做

這次開發的遊戲中,戰鬥事件的時機跟動畫有很大的關係,像是閃避時,在哪一段時間中是無敵的,或是攻擊時,什麼時候進行傷害判定等等。在開發初期時,因為動畫還沒開始製作,所以選擇先用秒數來表達這些事件的時機點,一開始也覺得這是很直覺的作法。而隨著戰鬥規格的發展,這套參數系統也越來越複雜,最近還花了兩個月把它整理一番。

dash-config-using-timing 使用秒數來表達時機,指定在前幾秒的時間內,可以觸發

然而在開始套動畫之後,發覺這套以時間為主的參數系統完全無法使用。因為透過動畫趨動的事件是以開關為主,像是閃避無敵可以透過在動畫開頭開啟無敵狀態,接著在後面某個影格關閉來定義無敵的時間,或是攻擊的傷害判定時機,也可以在對應的影格上放置事件就好。

dash-config-using-animation-clip.png 使用動畫來控制變數來表達時機,在指定變數為 true 的時候,就是可以觸發的時候

這才意識到,既然已經知道戰鬥系統會跟動畫關聯,當初就應該以動畫為基礎去製作戰鬥系統,而不是先做一個之後用不到的暫代版本。因為到頭來,花在暫代版本的時間都會白費之外,還要重做一套全新的版本。如果有其它功能是基於暫代版本去做的話,還要一併修改,也得再確認一次這些功能有沒有 bug,所花的時間不會只有開發新版本的時間。

time-spent 除了開發新版本的時間,其餘都是白花的

先求有,但別繞路

所以如果知道要做的功能未來會怎樣時,最好一開始就以此為方向來開發功能,還沒有所需資料或素材就用暫代的。像戰鬥系統就算還沒有動畫,可以先用幾何形狀拉簡單示意動作,如果不用幾何形狀,也可以先把動作的時長用兩個 keyframe 簡單表示就好。因為前期的重點是把戰鬥事件實作出來,先驗證這些事件在遊戲中如何運作比較好。等到可以套上動畫之後,就可以以此為基礎,去調整事件的功能。想想如果當初就這樣做的話,就可以少花這兩個月的時間了 :cry: