故事的開始:
大概在去年底的時候,因為各種各樣原因,我決定嘗試一遍開發遊戲。促使我開始的原因有很多,其中包括在去年底,從網上各種消息來看AI編程似乎到了一個比較能成熟應用的階段,對於那時不掌握代碼能力的我來說,似乎起步門檻終於降到了一個對我比較舒服的狀態,我可以踏出這一步了。
首個遊戲的嘗試大約於4月初結束,實際開發只是一小部分,中間經歷了不少事情,包括學習專業的遊戲策劃工作知識,進行AI編程可行性測試,引擎選擇與學習(最後選了Godot),以及發現代碼還是得學之後對代碼知識的補課等等。上個項目一結束,我就開始思考接下來的安排,在為完善前一個項目而補習各種進階知識的過程中,我就逐漸積累了下一個項目的想法,剛好在那幾天看到了機核新一屆BOOM正在報名的消息,沒做太多考慮,我就決定參加比賽,接著進行第二個遊戲的開發。
我在B站的同名賬號有關於這兩個項目的視頻,這裡就不宣傳了。本次文章就講述最近一個月,我是如何利用下班時間獨自完成一款完整的BOOM參賽遊戲作品的。
其實我一開始沒有打算獨自開發,因為前一個項目的嘗試真的搞得我有些頭大,而且我覺得我之前有點孤僻,GameJam比賽還是應該找人組隊,合作完成。於是我在機核發了招募信息:

但最後有兩個原因導致我還是一個人開發,一個是我發佈信息時報名只剩幾天截止了,確實很難找到合適的夥伴。
第二個更重要的原因是,為了節省時間,發佈那幾天我同時開始完成遊戲設計文檔和界面框架搭建,幾乎只用了兩三天時間,整個遊戲的模樣就已經被完整確定了。這說明這個遊戲在我心中已經非常明確,我只差把它做出來。這種情況下,我一個人開發,反而會減少中間可能的冗餘討論,讓這個遊戲百分百是自己想要的樣子。所以最終,雖然知道又要繼續熬一個月的夜,但為了成品的統一性,我還是決定自己完成開發。
起步,數倍壓縮的時間規劃:
接下了這個大活,馬上就要面臨最大的現實問題:工作量。
給大家說一下這遊戲(當時)的內容量:遊戲是一款類自走棋遊戲,有4大陣營,6大職業,24個兵種,每個兵種有各自不同的能力,再加4個陣營能力和6個職業羈絆,然後還有11個寶物(裝備),以及合成系統(三合一合成更高星級兵種),英雄系統(初始從3個英雄中選一個),商店系統(隨等級越來越強大),遠征隊系統(管理你的隊伍),以及與比賽主題有關的奉獻系統等等,我只有一個月時間,既要完成遊戲設計,又要完成美術資源,又要實際把它們開發出來。
以上一個項目我的開發速度來比對,我差不多要提速六倍才能完成。
我當然不能用這個速度往後推去規劃安排,我必須倒推時間節點,把每個階段的進度卡死。大致的時間規劃是,從4月7號開始,最後用三四天把開發前的所有工作完成(如DEMO版本的所有美術資源導出,包括正式命名等),進入開發後,用一週完成除能力系統外所有功能的開發,第二週開始實現能力系統和正式實現所有能力,務必保證在5月之前把能力開發完,這樣最後4天我才能用來替換美術資源,修bug,調數值和增加音頻資源。想要遊戲能實現,這個進度絕不可往後推一天。
當然,我現在能發文章,肯定說明最後完成了,而且事實上最後差不多是7倍到8倍提速,我原本預估24個兵種能力以我過去的速度差不多要預留十天時間,實際最後只用了五天,因此我額外還增加了1個職業,4個兵種,開發了難度系統等等功能。

實戰,AI編程高效提速三大法則:
4月12號,前置準備工作全部完成,我再次打開Godot進入開發階段。為了真正吞下這大量的工作量,我幾乎每天都在思考如何提效,最後化成了各種各樣的小技巧,這裡我總結了我認為最重要的三個改進。
1.事無鉅細的文檔記錄跟進
這幾乎相當於為AI外接大腦。
在開發上個項目時,對於當時完全沒有開發經驗的我,為了最後真能把遊戲開發出來,而不是中途翻車無力迴天,我進行了一些思考。我的應對方法是,在正式開發前,把我對於後續功能實現中沒有把握的部分,一一先與AI進行對話,讓它給出一個討論後比較合理的方案,然後統一記錄在一個“技術文檔”裡。在正式開發前,把我的遊戲設計文檔和技術方案文檔都投餵給了AI,讓它快速對接下來要實現的項目有一個基本瞭解。
這個習慣後來延續到了這個項目中。

但這還不夠,隨著功能的正式實現,實際腳本中每個功能的實現方法,函數和變量的名稱,會逐漸和技術文檔裡預設的不一樣,此後再給AI看原本的技術文檔,不僅沒有用,甚至很容易起到誤導效果。
於是這一次,我的改進方式是,每次完成了一個重要新功能後,我就讓AI自己新建一個文檔,把剛剛實現的整個功能的運作流程和要點總結進去,於是這一次,我多了這麼多文檔。

這樣做的好處是:
1.寫文檔本身就是AI的天然長項,這工作對它來說很高效也沒有出錯空間。
2.AI同時也習慣於閱讀文檔,更不用說以它自己熟悉的標準格式寫下的文檔。
3.趁AI剛剛開發完功能時讓它做總結,是它對功能最熟悉最有記憶的時候,寫出來的文檔含金量也最高,幾乎不用擔心有幻覺在其中或有重要遺漏。
用過Cursor的朋友都知道,每次新建一個對話框,其實就是一個全新的AI,它不是你的老朋友,沒有之前你和其它AI討論過的任何記憶。你想僅靠對話讓新朋友跟上你當前的思維進度,可能需要非常多次的對談,中間還要保證它不走歪。有了文檔記錄之後,每次繼續完善一個功能時,我就把相關的文檔直接扔給AI,讓AI瞬間裝載前世記憶。就這一個改進,幫我省下了大量的時間。

28個兵種的職業能力文檔最後記錄了有5000多行,沒有這個文檔隨時進行快速回顧,我必定會在這裡栽上很多跟頭。

2.重點嚴控框架的搭建
一句話,在AI搭建框架時多花一小時監督,可以在未來幫你節省十天收拾爛攤子的時間。
因為AI的無記憶,AI編程容易造成的另一個問題是,每次你給它一個要求,它給你的實現方案都有可能是不一樣的。有時是完全不同的實現,有時看似相近但對後續工作量影響天差地別,這倒不一定是問題,問題是你必須要做那個決策的人,你的決策質量最終決定了項目的整體質量。
這也是我意識到代碼知識還是得補的地方。
給了你那麼多種方案,你有沒有能力判斷哪一種是對當前項目最合適的?亦或應該有更合適的方案,但因為缺少信息提供所以AI沒有給到你?另一個重要問題是,當你真正確定方案後,你有沒有辦法監督AI,保證後續開發的持續統一?
我在前一個項目吃了這個問題的虧,當我還沒意識到這個問題時,在和AI討論一個功能時,每次都以為它默認給出的方案看起來像模像樣的,應該是正確的,就讓它執行。結果一個很簡單的功能,最後越寫越多,用了一千多行代碼才實現,可想而知,這裡面有多少不必要的冗餘,縫合了多少種不必同時共存的方法,以及未來要再進行任何一點小修補時,AI有多大可能因為忽略掉某個小地方而出錯。
所以這一次,每次要開始進入一個新系統的實現時,都是我精神最專注,看代碼最認真的時候,絕不急於讓AI馬上開始實現腳本,務必討論到覺得自己挑不出任何毛病來後才讓AI去執行。且和第一點一樣,在測試完功能確實實現之後,馬上讓AI撰寫文檔總結。同時很重要的,你自己必須真正理解功能的實現方式,將其內化於心。

還記得前面說的預估十天的功能只用了五天完成嗎,這就是框架健壯的功勞。
3.巧妙地化解和避開難題與死結
這一點比較玄妙,因為很多時候,不到問題真的解決不了,你不會意識到這個問題竟然是個難題,你總會覺得AI下次給出的修改方案就能把問題解決了。所以這需要一些經驗,當你體感當前這個問題已經花了AI一個小時,反覆嘗試也沒有解決,甚至更直接點,AI已經開始反覆說胡話時,你就可以收拾收拾,做好整理工作,回退版本去了。
回退完版本後,下一次重新出發時,因為知道了這個問題很難解決,你可以在一開始就要求AI給出一個最簡單最小改動的補丁方案,或者不再撞南牆,完全轉換思路用一種“面子工程”去實現一個效果。畢竟這是GameJam作品,有時確實不用那麼在意代碼的優雅度。
實際開發中我有好幾次遇上這樣的情況,一個功能給了AI一個多小時也沒有實現,而且眼看著代碼差不多已經被AI改廢了。我冷漠地回退到修改前的版本,讓AI用最簡單的方式去實現,結果AI只執行一次就實現了我的要求。
這裡舉一個例子,比賽截止前最後一天,我打算導出一個可以在線試玩的Web版本,但導出後的版本死活沒有任何聲音。我一開始大意了,覺得這種導出問題應該能很快解決,就是改幾處代碼的問題。結果,後面花了幾個小時,用盡各種辦法去調試,AI依然找不出問題所在,我明顯感覺到這是一個典型的超出當前AI解決能力的問題。
此時已經來到深夜,離截止時間只剩一個多小時,我知道只能進行一些妥協了。我心想,算了,別的不說了,你至少讓我進入遊戲後能循環播放BGM總可以吧?於是我就想到,既然是Web版本,能不能不用Godot自己的音頻機制,就用Web端的方式去播放音頻?我把這個思路告訴了AI,沒想到只一次嘗試,就真的成功了,我終於聽到了第一聲聲音。
於是我接著想,既然這個思路是可行的,那我可不可以讓所有音頻的播放都繞過Godot,只監聽Godot發出的信號,然後全部用web的方式去播放音頻?我把這個思路告訴AI,AI也認為可行,於是我讓它繼續給出完整方案,最終前後只用了十幾分鍾,我就實現了一個完全繞開Godot音頻機制的獨立音頻播放方案,解決了問題,順利提交了作品。

我相信隨著AI的進步,也許未來某天當我遇到類似問題時,AI能直接給我提供這種方案。但在當前,還有很多類似的情況,需要靠一些“人類的經驗和直覺”,去讓AI實現一些它永遠不會自己產出的解決方案。
補充:美術的把控
這部分其實沒有什麼新鮮的,因為工作量龐大,這次的角色部分我先用了MJ產出最初的資源,但是無論怎麼收束關鍵詞,產出資源的美術風格始終會各有不同,需要後期進行一次專門修整把控,統一所有角色的風格,包括頭身比,刻畫風格,配色,重心等等。給大家看幾個修改例子就明白了。

結尾:人生中充實的一個月
今年以來比較喜歡的一個詞叫“著力即差”。開發上一個項目時,明明已經給自己定了一個很簡單的遊戲,還是在開發過程中遇上了大量預想以外的問題,導致不僅實際開發過程折磨自己,最後的結果也沒看出有什麼亮點。
也因為有了上個項目的實踐,我才能在這個項目開始之前就調整好自己的心態,多多將腦力用在那些決定性的,真正重要的節點上,也因此才能實現如此大幅的效率提升。同時改變的不僅是效率,還有這個月的心態,整個月中我每天都是按部就班地進行開發,很少有真的覺得壓力過大的情況。事後回想起來,只覺得是過了很充實的一個月,很踏實地完成了一件事情。
最後,當然還是歡迎大家來直接體驗我的遊戲,文章著重講述了開發過程和項目管理,沒怎麼聊設計理念,當你實際體驗過遊戲後,還會感受到我在遊戲設計層面的另外的思考。歡迎大家多多與我交流,或者在機組發佈你的試玩感受,只要看到了我都會回覆,謝謝大家~