Skip to content
docs / kit-walkthrough
更新日誌 ← 回到網站 GitHub

從零件素材包做出 kit

很多 Fab 素材包是零件包:幾百片牆面、樑、簷口、拱、扶壁,各有作者自己的 pivot 與朝向,沒有一片是完整的牆。ClaudeUnreal 的 kit 工具把這種包變成 可鋪排的成品,可以直接交給城堡組裝器或城鎮規劃器——你不用量 pivot、翻面、 算間距。

下面的提示詞就是你在編輯器 Claude Code 分頁裡打的話。每一條走完一個步驟, 串起來就是完整流程。示範系列第 22 集就是這條流程一刀未剪的實錄,從空白場景到成品:

步驟工具寫入人工停點
搭台stage_pack_kit/Game/Maps/<Pack>_KitStage—
勘查survey_pack無你從清單挑角色
格式化format_pack_part/Game/<Pack>_Formatted/SM_<part>_F烤之前確認正面視圖
組合compose_pack_piece/Game/<Pack>_Formatted/Pieces/SM_<name>烤之前確認三視圖
檢查get_pack_status無—

素材包自己的資料夾永遠不會被寫入。<Project>/KitRecords/<Pack>/ 底下的兩個 純 JSON——parts.json(確認過的朝向)與 pieces.json(每塊成品的 recipe × binding)——就是紀錄,應該進版本控制。它們刻意放在 Content/ 之外:編輯器會監看 內容目錄裡有沒有來源檔變動,而 .json 正是它認得的可匯入格式,紀錄放在那裡會讓 工具每寫一次就打斷你一次。

Recipe 會點名的角色,以及我們綁到 WhiteCastle 的 mesh。右欄換成你自己包的 mesh。

角色範例 mesh(WhiteCastle)是什麼
surfaceSM_Surf_Plane_005牆皮——單面片;決定模組長度 L 與每層高度
capSM_Floor_Plane_003蓋在牆頂的地板片
buttressSM_Det_WCArchElemContrforce2_1實心柱墩——不是 Contrforce_1,那個雖然叫扶壁,其實是鍍金尖頂飾
slitSM_Gat_WCArchElemWindow1_Full、SM_Gat_WCArchElemWindow2_Full窄窗(兩種變體)
bandSM_Det_WCArchElemBeam_2飾帶(string course)
corniceSM_Gat_WCArchElemCornice_2_Full女兒牆下的簷口
archSM_Gat_WCArchElemArch_2_Full圓拱

所有 mesh 都在 /Game/WhiteCastle/Meshes/ 底下。這就是第 22 集結尾的 binding; Claude 看著勘查表提出來,人一個字都沒改。

整包每一個 mesh 量過、拍成縮圖

/cu:kit /Game/WhiteCastle 把整條流程當成一條軌道跑完。它只停三次,因為真正需要 眼睛的只有三個時刻——中間所有事(量測、格式化、生成、合併、存檔、檢查、驗證成品 鋪得起來)都不會問你。

  1. 開始。

    /cu:kit /Game/WhiteCastle

    /Game/WhiteCastle 要換成你自己素材包的內容資料夾——你的零件 mesh 放在哪裡就 填哪裡。WhiteCastle 只是示範剛好用的包,外掛並不附帶它。

    Claude 先替素材包搭一個專屬舞台——以包名命名、平地、均勻打光的關卡,切換前會先把 你原本開著的關卡存好——之後每張表都在那裡拍,不會拍到剛好載入的地形。接著勘查 素材包、自己讀 Preview 分頁裡的清單,回來提一份 binding——牆面、頂蓋、柱墩、窗、 飾帶、簷口、拱各建議用哪個 mesh——並明說那只是提議。

  2. 一行修正 binding。

    yes, but use SM_Det_WCArchElemBeam_2 for band

    或直接說「looks right」。Claude 接著把每件零件的朝向提案在同一張表上:被綁定 的零件排成一列,正面與斜角各一張,編號對應一張列出真實尺寸與建議轉向的表格。 每件背後有一塊灰色板——它將來要貼上的那面牆。朝向錯的零件會明顯離板懸空。

    八件零件站在灰色板前,正面視圖

  3. 一行確認朝向。

    3 turn 90, rest are fine

    或直接說「yes」。Claude 把全部烤好、組出成品,再給你看三視圖。你說「bake it」, 就得到一片可鋪排的牆——外加三份並排生成好讓你看接縫,看完自動清掉。

    提案中的成品斜角視圖:兩層牆、柱墩、窗、飾帶、拱廊

軌道跑完會再搭一次舞台,那就是你看成果的地方:你綁定的零件排成一列,旁邊基座上是 它們變成的成品。layout="recipes" 會把每塊成品放在它的零件後面,那個視角最能說明 組合器做了什麼。

完成後的舞台:散裝零件排一列,牆面成品站在旁邊的基座上

軌道只是五個指令的外殼。想單獨格式化一件零件、試自己的 recipe、或重開編輯器後檢查 狀態時,直接用它們。

Terminal window
# 0. 搭台——素材包專屬的平地打光關卡;最後再跑一次就能看到整套 kit
.claude/cu exec stage_pack_kit --params-json '{"path":"/Game/WhiteCastle"}'
# 1. 勘查——量過、不排序、什麼都不寫
.claude/cu exec survey_pack --params-json '{"path":"/Game/WhiteCastle","show":true}'
# 2. 朝向——整包一張表,什麼都不寫
.claude/cu exec format_pack_part --params-json \
'{"mesh_paths":["/Game/WhiteCastle/Meshes/SM_Surf_Plane_005",
"/Game/WhiteCastle/Meshes/SM_Floor_Plane_003"]}'
# ……然後用確認過的 yaw 逐件烤
.claude/cu exec format_pack_part --params-json \
'{"mesh_path":"/Game/WhiteCastle/Meshes/SM_Surf_Plane_005","yaw":90,"apply":true}'
# 3. 組合——先提案,看過再加 "apply": true
.claude/cu exec compose_pack_piece --params-json \
'{"recipe":"curtain_buttressed","name":"WC_Curtain_A","binding":{ ... }}'
# 4. 狀態——紀錄對磁碟,重開編輯器後先跑這個
.claude/cu exec get_pack_status --params-json '{"path":"/Game/WhiteCastle"}'

內建 recipe:curtain_plain、curtain_buttressed、curtain_capped (一段牆的最後一塊,末端封起來)、doorway_plain、doorway_banded、 tower_plain 與 tower_buttressed(sides 把同一片牆折成多邊形鼓身, 所以塔用牆的 binding 就組得出來)。其他情況傳 recipe_dict——兩層牆、每模組四扇交替的窗、半高一條 飾帶等等。所有驗證問題會在生成任何東西之前一次報完。

單件零件仍有自己的提案(只給 mesh_path、不給 apply),批次裡某一件朝向不對、想 單獨看仔細時就用它。

  • 沒有東西浮空。 每個裝飾都貼皮:背面貼外皮(flush: "front")或內皮。
  • 沒有東西壓在接縫上。 會跨過模組邊界的複本會被點名拒絕;成品永遠剛好 L 長。
  • 烤出來的尺寸如約。 merge 後成品會被生成並量 bounds 跟 recipe 承諾比對;不符 就回報失敗並點名軸向,什麼都不記錄。
  • 每個朝向與 binding 都是你決定的。 工具只呈現與寫入,從不排序、不代選。

鋪排檢查由 Claude 自己在回報前做完——三份並排、拍照、刪掉。看得到接縫就是某件零件 的 yaw 錯了;說是哪一件,它會重烤。

上面除了 mesh 名稱,沒有任何東西是 WhiteCastle 專屬的。要換包:

  1. 勘查它的資料夾,挑出對應的零件。
  2. 逐件格式化(朝向閘門會抓到正面朝錯的零件——這是唯一沒有規則能知道的事)。
  3. 用同樣的 recipe 名稱配你的 binding。模組長度、層高、厚度全部來自你的牆面零件。

Recipe 的完整說明——每種 layer kind 與每個鍵——在 repo 的 docs/mcp-tools/kit.md。