大家好,我是 Lise。
在現在的遊戲開發現場,大概不管是哪間公司、哪個專案,應該都多少有在使用 ClaudeCode 或 Codex 來輔助 AI 開發;也有在遊戲 Jam 等活動中,出現「試著讓 AI 做個小型遊戲程式看看」這類嘗試。
不過即使是已經在活用 AI 的工程師,心裡多少還是會有一個疑問:
「能不能把整個遊戲開發和設計都直接丟給 AI 呢?」
這篇文章就是我嘗試「從零開始用 AI 進行遊戲開發」的備忘錄。

前篇的總評與結論是:
「可以把所有編碼都交給 ClaudeCode/Codex 來完成 Unity 遊戲開發。」
但這並不是說可以毫無準備地全丟給 AI,而是建立在以下前提之上:
這次就接續前篇,整理實際持續進行遊戲開發後所得到的知見。
前篇沒有提到,這裡指的是以下內容。
觀點包括:
可能有人會想:「可是我本機上明明就能跑啊?」
但如果從零開始設計就直接丟給 AI,常常會被塞成一個檔案 5000 行之類的狀況,
根本無法在專案啟動階段當作可用的開發基礎。
這次要談的,就是如何設法解決這件事。
其實和前篇相比,方針轉換或手法上的大變化並沒有很多。
這是非常好的消息,代表我們能持續輸出一定水準的成果。
(不過實際上,必須先把這些成果物用來量產遊戲,才算真正達成目標。)
後篇會解說這套工作流程與思考方式,以及 AI 會使用的規則文件。
如果你想直接看成果,可以從這裡開始。
分支是 develop2。(因為不小心把 develop 當成前篇的參照分支了)
因為不是本文重點,所以我只簡單附上做了什麼遊戲的圖片、影片與 WebGL Build。
有用 AI 做遊戲的人可能有經驗:
如果隨便讓它做,大概在到達這種複雜度之前就會卡住。

↑可以透過 WebGL Build 實際遊玩
攝影機移動:WASD
樓層切換:Q/E
滑鼠選取
雖然和前篇有些重複,但如果中途才開始看,可能會不太容易理解,所以我還是從頭說明。
反正會看這篇的人,大概也讀過很多 AI 相關文章了,所以我只會聚焦在我認為重要的部分。
先講一點,這整套工作流程的核心就是在作業間隙進行的文件化(docs 化)。
第 2 步我會詳細說明。
「決定」的意思,就是要真的決定。
你可能會想:「大概已經有方向了吧?」
但如果帶著模糊的遊戲印象就開始讓程式動工,最後一定會迷路。
請在這裡先決定好:是什麼類型、什麼畫面、有哪些 UI、能做哪些操作、遊戲循環是什麼、玩家會得到什麼體驗。
請把它打磨到你閉上眼睛時,能在腦中完整重現遊戲的程度。
也可以先拿去和 Claude 對談。
如果這一步不先決定,規格的模糊性就會在後面的資料設計裡,以「悶棍」的形式慢慢反撲上來。
資料設計一般來說可分成主資料(Master Data)與 Domain 物件兩種,
不過先按照「主資料 → Domain 物件」的順序來設計,心情會比較輕鬆。
「主資料」是指遊戲執行期間保持不變的資料。
如果以寶可夢來說,就是名稱、種族值、出現的道路等資訊。
「Domain 物件」是指遊戲執行期間所處理的資料物件中,用於商業邏輯的那些。
如果以寶可夢來說,就是「存在、具有狀態、而且會變化的所有東西」。
雖然這個比喻好像也沒很精準,但大致上就是指遊戲執行時狀態會變動的資訊。
先從主資料的資料表清單開始做。
這次的「冒險者公會經營遊戲」大概會像這樣:
在開始寫程式之前,最好先只保留資料表名稱與欄位名稱,並做到第三正規化。
再讓 ClaudeCode 或 Codex 幫你整理得漂亮一點。
參考 commit(雜訊稍多)
Domain 物件無法一開始就一次完成,因為遊戲功能會在之後持續增加。
這個階段應該特別注意的是:
一開始,若是角色的話,只需要主資料 ID 和座標資訊就夠了。
最後會變成這樣的型態。
角色的名稱、種族是什麼,這類資訊則透過持有主資料的 key 來表現。
這裡插入 docs 化 的話題。這不是工作流程中的某個特定步驟,而是要在步驟 1~6 的整體開發過程中同步進行。
AI 遊戲開發工作流程裡最重要的就是docs 化。
Unity 程式在一般作法下是 1 個檔案對應 1 個類別,
但檔案數一多,AI 就無法在單次 context 中掌握整體,對於讀取介面與類別間關係來說效率很差,而且雜訊很多。
我理解世界上會有人說「實作不就是規格書嗎」,但 AI 每次重連 session 都需要重新讀取,
如果直接從程式碼去反推,不只 token 消耗量大,最重要的是精度會被資訊雜訊掩蓋。
能用自然語言記錄註解與未來構想,也是很重要的一點。
這不只是「這樣做比較好」的程度,而是一定要做。
不過,不需要你親手寫。
先和 AI 來回對談,把想法收斂之後,再請它把內容寫進 docs 即可。

如前所述,ClaudeCode 與 Codex 由於其特性,需要定期重置 session。
如果不重置而持續使用,token 效率會逐漸下降,原本像資深工程師的氣場也會消失,甚至會不太聽從你輸入的提示詞。
就像新進工程師加入專案時一樣,
要先讓它讀文件、
要讓它能快速上手,
因此必須事先準備好文件架構。
在這次驗證開發中,我最後整理出的文件種類如下 4 種。
放置遊戲規格的資料夾。
想到的內容、未來構想、遊戲系統、功能等全部放在這裡。
主資料與 Domain 物件的設計意圖也會記錄在這裡。
放置遊戲實作規則的資料夾。
可供其他專案沿用的內容放在這裡。
這次的驗證開發,本身就是為了建立與擴充 guidelines,並提升其精準度而製作的遊戲。
理想狀況是,之後新做一款遊戲時,只要把這些檔案複製過去即可。
遊戲實作的路線圖。
roadmap → phase → task 之間是父子關係。
(phase 是把 roadmap 內的作業,以群組方式切分的單位,例如「戰鬥系統」「道具系統」等)
當 guidelines 穩定後,即使把整個 roadmap 單位直接丟給 AI,也能交付品質相當不錯的實作。
後面會提到,這部分也會交給 AI 文件化,再由人類審查。
自我審查的存放處。
會讓 ClaudeCode 與 Codex 各自進行自我審查。
兩者只是性格不同,但都能提出相當適切的指摘,因此會把審查內容合併,再讓它們自己修正,反覆進行。
在思考規格、製作新功能時當然如此,
即使因為自我審查導致結構改變,也務必要寫進 docs 中永久保存。
(現在回想起來,當初應該把 commit 再切得更細一點。)
將建立好的主資料與 Domain 物件實際落地到程式碼中。
不過如果為了主資料在這個時間點導入 SQLite 或 MasterMemory,成本太高,
而且最重要的是 ClaudeCode 與 Codex 也不會很輕鬆地幫你修改。
這次全部都先用 Dictionary 以硬編碼方式建立。
以道具為例,請先確認它是 immutable。
每個主資料表對應建立一個類別。
以下整理 Prefix 與 Suffix 的用途。
(這裡只說我自己是這樣用,不列一般性定義)
DungeonInnCameraManager 之類,非常慘接著製作 Orchestrator 與 UseCase。
Orchestrator 就是可以呼叫 UseCase 的 UseCase。
一般而言,常見的做法是「UseCase 可以呼叫其他 UseCase」,
但因為我不喜歡依賴關係像蜘蛛網一樣糾纏在一起,所以把它們分開了。
如果不知道 UseCase 是什麼,請搜尋「Clean Architecture」。
順便附上我一時興起做的「ずんだもん的 Clean Architecture 解說」:
https://github.com/lisearcheleeds/Lighthouse/blob/master/Docs/ja/zundamon/CleanArchitecture.md
簡單來說,「UseCase」就是依照資料操作步驟所建立的類別。
其實到了這個階段,如果 design 文件已經很完整,主資料與 Domain 物件也已經穩定建立,這部分就可以全部交給 AI。
這個步驟只要一句:
「請依照 design 的內容製作 UseCase。」
AI 之所以會開始做出莫名其妙的實作,原因就在於你同時要它處理「資料設計」與「使用這些資料的處理」。
Claude 和 Codex 在既有架構上的修正與擴充能力強到不必多說。
接著正式開始依照 roadmap 進行作業。
雖然也可以從資料設計直接定義 roadmap,
但資料設計要調教到 Claude/Codex 能穩定配合,通常要花很多工夫;
在那之前先亂排程,效益也不大。
另外,這套工作流程中建立 roadmap 的 md 檔案,目的是為了「讓 AI 可以直接接手處理」。
請根據 design 中記載的遊戲內容,製作一份能完成實作與收尾的 roadmap,並以 md 檔案形式輸出。
請將 roadmap 依照容易作業且可確認動作的單位切分成檔案。
請在 roadmap 中記載目標與適用範圍。
這樣就足夠了。
如果一開始就在所有 roadmap 裡把每項實作細節都寫得太具體,
等到真的要開始執行該 roadmap 時,反而會變成雜訊。
先只寫抽象層級的計畫即可。
接下來就是反覆進行這份 roadmap 的作業。
不過進行方式很重要。
在開始 roadmap 作業的正前方,先補上該 roadmap 的內容。
Step 1. 記錄功能細節
請詳細分析 roadmap{N} 的內容,並具體記錄需要哪些功能
Step 2. 記錄功能的理想設計
請詳細分析 roadmap{N} 的內容,並在參考實際程式碼的同時補充理想設計。
但不要做任何為了維持相容性而存在的實作或繞路。
所有為理想設計而進行的破壞性修改都可以接受。
Step 3. 實作功能
請實作 roadmap{N} 的內容
重點是在實作之前插入這兩個步驟。
Step 1 是因為在前面的作業中,專案狀態可能已經改變,或方針可能有所調整,因此要在這個時間點看過程式碼後,將具體作業方針寫進 roadmap。
Step 2 則是為了抑制 ClaudeCode 或 Codex 為了趕快完成功能,而做出偷工減料的實作。
AI 特別容易寫出「雖然可以動,但這樣的實作真的沒問題嗎?」的程式碼,
原因就在於它們的設計目標是「讓它動起來」。
資深工程師能在寫程式的同時,一邊組出理想設計;
但 AI 就像 NavMesh 一樣,如果不先幫它鋪好路徑,它就會一直撞牆。
這點非常重要,請直接複製使用。
結論是,確實做出了具有足夠程式品質的遊戲。
雖然離完美設計、完美實作還差得很遠,
但已經能維持容易增加內容、具備高延展性的遊戲設計。
以我的經驗來說,若放在實際遊戲開發現場,大概是偏差值 55 左右的程式品質。
作業時間大致是 GW(4/29~5/6)的連假 + 週六或週日 + 平日晚上 1~2 小時,約 10 個人日左右,我認為已經是相當不錯的成果。
divide and conquer 🍆如果把「設計」和「實作」一起丟給 AI,AI 會把所有能量都投入到達成目標本身,因此產出的成果物往往不會兼顧泛用性與擴充性。

將它們分別設定不同目標再交給 AI,就能同時達到設計上高品質的目標,以及實作上高品質的目標。

這張圖可能其實不需要。
我把專為商業用途認真設計的 Unity 架構,以 MIT 授權公開了!
包含場景基礎、對話基礎、本地化、資產管理、場景動畫、輸入層控制等,
「不是遊戲本體卻又是讓遊戲得以成立、麻煩但絕對非做不可的功能」
這些部分都能交給它處理,是一套架構框架。
當然也非常適合搭配 AI 使用!
VContainer + UniTask + Clean Architecture,
雖然……可能只比一般稍微難一點點,但能減少 Unity 開發常見的 bug,並以高速實作與開發出穩定品質。
而且現在還附贈能穩定讓 AI 使用的提示詞!
原文出處:https://qiita.com/archeleeds/items/6ec24ba4942973a1ce0b