第 6 章你已經做了第一輪視覺升級。
你替平台套用材質,加入少量岩石、植物、遺跡石柱,也開始理解 MeshPart、MaterialVariant、SurfaceAppearance 與 asset 管理。
那些資產多半是「生成一次,放進場景」。
這一章要處理另一種 AI 生成資產:Procedural Model。
Procedural Model 的重點不是一次產生一個漂亮模型,而是產生一個可以調整參數的模型。
例如:
橋變長時,木板數量跟著增加。
橋變寬時,左右繩索距離跟著改變。
攤位變大時,桌面、支架、布棚比例跟著更新。
燈籠串數量改變時,燈籠會重新平均分布。
本章你會用 Assistant 的 /generate_procedural_model,替 AI Adventure Island 產生一座可調整的冒險島繩橋。
這座橋會放在主路線或支線平台之間,讓讀者理解:
ProceduralModel。Attributes。GeneratedFolder。MeshPart / Model 有什麼差異。本章仍然不寫 gameplay Script。
橋是場景組件,不是互動系統。互動會從第 8 章開始。

圖 7-1 Procedural model 不只是固定網格,還能透過參數調整結構,適合反覆迭代場景物件。
本章依據以下 Roblox 官方文件撰寫:
官方文件對 procedural model 的核心描述很清楚:
ProceduralModel = parameter-driven Model
它不是普通 Model 多了一個名字。
它的內容由 generator module 產生,並根據 Size 和 attributes 重新生成。
Assistant guide 也提醒,/generate_procedural_model 有使用限制:24 小時 rolling window 內最多生成 50 次。這個限制不適合拿來亂試。
所以本章會先設計參數,再生成。
這就是 AI 工作流的重要差異:
一般 mesh prompt:先描述外觀
procedural model prompt:先描述哪些東西需要可調
目前 AI Adventure Island 已經有:
AdventureIsland
World
Blockout_Parts
Path_01
Path_02
Path_03
Path_04
Path_05
SidePlatform_01
SidePlatform_02
SidePlatform_03
GoalPlatform
Visuals
Rocks
Plants
Ruins
你現在想加入一座橋。
這座橋可能連接:
Path_03 到 SidePlatform_02
Path_04 到 GoalPlatform
如果你只需要一座固定橋,用第 6 章的 mesh 或 Creator Store asset 就夠了。

圖 7-2 生成前可以檢查分件清單。需要個別調整橋面、柱子或繩索時再保留分件;不需要時避免把結構切得過碎。
但本書選擇用 procedural model,原因是橋很適合展示「參數化」:
我們要做的不是一座最漂亮的橋。
我們要做一座可以調整、可以複製、可以放到不同位置的橋。
在生成前,先決定這座 procedural bridge 應該有哪些可調參數。
建議參數如下:
BridgeLength
BridgeWidth
PlankCount
PlankSpacing
CableCount
PostHeight
RustAmount 或 Weathering
PrimaryWoodColor
RopeColor
不是每個 Assistant 版本都會完全照這些屬性命名。這沒關係。
真正重要的是你在 prompt 中清楚說明:
輸入以下 prompt:
【Ch07 主任務|建立程序化繩橋】
/generate_procedural_model 請為 AI Adventure Island 建立一座風格化的繩橋。
這座橋必須是可重複使用的 procedural model,不是只生成一次的靜態 mesh。
請讓它適合連接兩座小型島嶼平台。
必要的可調參數:
1. BridgeLength:調整時,木板數量應按比例增加或減少。
2. BridgeWidth:調整時,可行走寬度與繩索位置應一起改變。
3. PlankCount:調整時,木板應沿著整座橋的長度重新平均分布。
4. CableCount:調整時,側邊支撐繩索或懸掛繩索的數量應跟著改變。
5. PostHeight:調整時,橋兩端柱子的高度應跟著改變。
6. Weathering:調整時,木材外觀應呈現較新或較老舊的程度。
風格:
- 風格化冒險島
- 木製橋板
- 繩索側邊護欄
- 輪廓清楚易讀
- 避免過多視覺雜訊
- 適合直接放進遊戲使用
Gameplay 限制:
- 中央必須保留清楚、可行走的路徑
- 不要新增任何 gameplay Script
- 橋的尺寸與結構必須適合玩家通過
- 生成的零件必須設為 Anchored
生成完成後,請說明:
- 建立了哪些 attributes
- 生成結果儲存在哪裡
- 哪些零件會影響碰撞
- 修改 BridgeLength 與 PlankCount 後應該測試哪些項目
這個 prompt 有幾個重點。
第一,它明確使用 /generate_procedural_model。
第二,它指定「不是 one-time static mesh」。
第三,它列出可調參數。
第四,它描述每個參數變動後模型應該怎麼回應。
第五,它要求 Assistant 回報 attributes、generated output 和 collision。
對 procedural model 來說,這些比外觀形容詞更重要。
生成後,Explorer 可能出現類似結構:
Workspace
RopeBridge
Generator
GeneratedFolder
Planks
Ropes
Posts
或:
Workspace
ProceduralRopeBridge
RopeBridgeGenerator
Generated
Plank_01
Plank_02
Plank_03
LeftRope
RightRope
Post_Start_Left
Post_Start_Right
Post_End_Left
Post_End_Right
不同版本的 Assistant 產生的命名可能不同。
你要檢查的不是名稱是否一模一樣,而是是否有這三層概念:
ProceduralModel
Generator module
Attributes
Generated output
如果 Assistant 只產生普通 Model 或一堆 MeshPart,而沒有可調 attributes,那它不是本章要的結果。
這時不要硬接受。
你可以追問:
這看起來像普通 Model。請確認它是否是 ProceduralModel。
如果不是,請重新使用 /generate_procedural_model 建立一個有 editable attributes 的 procedural rope bridge。
生成完成後,先把橋移到本書的專案結構:
AdventureIsland
World
ProceduralModels
RopeBridge_Prototype
不要讓它留在 Workspace 根目錄。
本章建議新增一個資料夾:
AdventureIsland.World.ProceduralModels
Visuals 用來放第 6 章的裝飾資產。
ProceduralModels 用來放仍然需要保留 generator 與 attributes 的可調模型。
這樣做的原因是:procedural model 的 source-of-truth 不是每一個生成出來的 plank 或 rope,而是它的 generator module 和 attributes。
ProceduralModel 繼承自 Model,但它比一般 Model 多了一個重要特性:它會根據參數生成自己的內容。
一般 Model 的工作方式比較像:
作者放進哪些 Part / MeshPart,它就有哪些內容。
ProceduralModel 的工作方式比較像:
作者設定 Size 和 Attributes。
Generator module 根據這些輸入產生內容。
這表示你不應該把它當成普通資料夾來手動改每個 child。
假設你手動移動了 Plank_07,下次 attributes 改變時,generator 可能重新生成整座橋,手動調整就消失了。
所以使用 procedural model 時,你要問的問題會改變。
不要先問:
我要怎麼把第 7 片木板往左移 1 stud?
應該先問:
這個模型有沒有 PlankSpacing 或 BridgeWidth 屬性可以調整?
如果沒有,就讓 Assistant 修改 generator 或重新生成一個更合適的 procedural model。
這就是 procedural model 的價值:用參數控制結構,而不是手動修每一個零件。
官方文件說明,ProceduralModel 的生成邏輯放在 generator module 裡。
這是一個 ModuleScript,通常會回傳一個 table,包含:
Attributes = {
BridgeLength = 40,
BridgeWidth = 8,
PlankCount = 12,
}
OnGenerate = function(params, targetContainer)
-- 根據 params.Attributes 和 params.Size 產生內容
end
這段不是要求你現在手寫完整 generator。
本章只是讓你看懂 Assistant 生成結果的骨架。
OnGenerate(params, targetContainer) 裡有兩個重要概念:
params:目前的輸入,例如 Size 和 attributes。targetContainer:生成結果應該被放進去的地方。官方文件特別強調:OnGenerate 應該把結果寫入 targetContainer,不要直接修改主 DataModel hierarchy。
原因很實際。
Procedural model 需要和 Studio 的 undo/redo、Team Create、拖曳工具、重新生成流程合作。如果 generator 隨便去改 Workspace 其他地方,結果會變得很難預測。
所以當你檢查 Assistant 產生的 generator module 時,可以先問 Assistant:
【Ch07 說明|解釋 Generator Module】
請解釋這個 procedural model 的 generator module。
特別說明:
1. Attributes table 裡有哪些參數。
2. OnGenerate 如何使用這些參數。
3. 它是否只把結果寫入 targetContainer。
4. 它是否會修改 targetContainer 以外的 DataModel。
如果 Assistant 回答說 generator 會修改 Workspace.AdventureIsland 的其他物件,那就要修。
本章的 procedural model 只應該生成橋本身。
Attributes 可以理解成你替 Instance 自訂的屬性。
Roblox 官方文件說,attributes 是你自己定義的 custom properties。你可以在 Studio UI 中建立,也可以用 SetAttribute()、GetAttribute()、GetAttributes() 操作。
在 procedural model 中,attributes 是最重要的操作介面。
以本章的橋來說,你希望在 Properties 裡看到類似:
BridgeLength = 40
BridgeWidth = 8
PlankCount = 14
CableCount = 2
PostHeight = 7
Weathering = 0.5
當你調整 BridgeLength,橋應該變長。
當你調整 PlankCount,木板應該重新平均分布。
當你調整 BridgeWidth,可走範圍和繩索位置應該一起改變。
如果調整 attribute 之後完全沒有變化,可能有幾種原因:
ProceduralModel 本身的 attribute。因此,Playtest 前要先在 edit time 做一輪 attribute 測試。
這一章的核心不是「橋生成出來了」。
核心是「橋的參數真的能控制橋」。
GeneratedFolder 是用來存放 procedural model 生成結果的容器。
官方文件把它描述為 non-source-of-truth data。
這句話很重要。
GeneratedFolder 裡的木板、繩索、柱子是結果,不是主要來源。
主要來源是:
ProceduralModel.Size
ProceduralModel attributes
Generator module source
這就像試算表:
公式 = source of truth
計算出來的數字 = generated output
你可以看計算結果,但不要把每個結果都當成手動維護的資料。
在本章,你可以把 GeneratedFolder 當成檢查區:
PlankCount 生成。CableCount 生成。PostHeight 生成。但如果要改橋的結構,優先改 attributes 或 generator,而不是手動改 GeneratedFolder 內的 child。
第 6 章談過 MeshPart。
MeshPart 適合做一個具體形狀的視覺資產,例如:
它的重點是外觀、材質、碰撞和效能。
Procedural model 的重點不同。
它適合做有規則、有重複、有尺寸變化的物件,例如:
可以用這個表判斷:
| 需求 | 適合 MeshPart / Model | 適合 ProceduralModel |
|---|---|---|
| 只需要一顆固定岩石 | 是 | 否 |
| 想要橋長度改變時木板數量跟著變 | 否 | 是 |
| 想要外觀非常精細的雕像 | 是 | 不一定 |
| 想要同一個圍欄 asset 產生不同長度 | 不一定 | 是 |
| 想手動微調每個小零件 | 是 | 否 |
| 想用 attributes 控制數量與尺寸 | 否 | 是 |
簡單說:
MeshPart 解決形狀
ProceduralModel 解決可重複規則
這兩者可以一起使用。
一個 procedural model 生成出來的內容裡,也可能包含多個 MeshPart 或 Part。
但你的操作重點會不同。
對 MeshPart,你檢查 mesh。
對 ProceduralModel,你檢查 generator 和 attributes。
生成橋之後,不要馬上繼續做下一個資產。
先測這座橋是否適合關卡。
第一輪在 edit time 測 attributes:
BridgeLength
- 改短時,木板是否減少或重新分布?
- 改長時,木板是否增加或間距保持合理?
BridgeWidth
- 改寬時,可走範圍是否變寬?
- 改窄時,玩家是否仍有足夠空間通過?
PlankCount
- 改少時,木板間距是否太大?
- 改多時,是否產生太多不必要零件?
CableCount
- 改變時,繩索是否正常分布?
- 是否出現穿插或漂浮?
PostHeight
- 柱子是否與橋面對齊?
- 是否擋住玩家視線或路線?
第二輪進入 Play mode 測玩家行走:
玩家是否能從橋的一端走到另一端?
玩家是否會被繩索、柱子或木板邊緣卡住?
玩家跳躍時是否會撞到側邊結構?
橋是否有明確的可走中央路線?
橋的視覺是否讓玩家理解它可以通過?
第三輪測專案結構:
RopeBridge_Prototype 是否放在 AdventureIsland.World.ProceduralModels?
是否留下未命名 Model、Part、MeshPart?
Generator module 是否保留在 procedural model 內或清楚位置?
GeneratedFolder 是否存在?
是否有不必要的 Script?
如果橋看起來漂亮但玩家會卡住,這一章仍然不算完成。
可調模型的第一個責任是可用。
如果生成結果不是 procedural model,可以用這個 prompt:
【Ch07 修正 1|補上程序化橋樑參數】
剛才產生的橋看起來像普通 Model,沒有可調 attributes,也沒有清楚的 generator module。
請重新使用 /generate_procedural_model 建立一座 procedural rope bridge。
要求:
1. 必須是 ProceduralModel。
2. 必須有 editable attributes:
- BridgeLength
- BridgeWidth
- PlankCount
- CableCount
- PostHeight
- Weathering
3. BridgeLength 改變時,木板數量或分布要跟著改變。
4. PlankCount 改變時,木板要重新平均分布。
5. 不要新增 gameplay Script。
6. 生成後請說明 Generator、Attributes、GeneratedFolder 分別在哪裡。
如果橋太複雜,可以用這個 prompt:
【Ch07 修正 2|簡化程序化繩橋】
目前 procedural rope bridge 太複雜,不適合 prototype。
請簡化:
1. 降低裝飾細節。
2. 保留木板、左右繩索、四根端點柱子。
3. 保留 BridgeLength、BridgeWidth、PlankCount、CableCount、PostHeight attributes。
4. 減少不必要的 MeshPart 數量。
5. 不要改變它作為 ProceduralModel 的結構。
6. 完成後列出簡化了哪些生成部分。
如果 attribute 沒有作用,可以用這個 prompt:
【Ch07 修正 3|修復程序化參數更新】
我調整 RopeBridge_Prototype 的 attributes,但模型沒有依照預期更新。
請檢查 generator module:
1. Attributes table 是否包含 BridgeLength、BridgeWidth、PlankCount、CableCount、PostHeight。
2. OnGenerate 是否真的使用這些 attributes。
3. OnGenerate 是否只把結果寫入 targetContainer。
4. 如果有 attribute 名稱不一致,請修正。
5. 完成後請告訴我每個 attribute 會影響模型哪一部分。
如果碰撞讓玩家卡住,可以用這個 prompt:
【Ch07 修正 4|修復繩橋通行碰撞】
玩家通過 RopeBridge_Prototype 時會被側邊繩索或柱子卡住。
請調整 procedural bridge 的生成結果或 generator:
1. 中央通道要保持清楚可走。
2. 純裝飾繩索可以不擋玩家。
3. 木板應該保留可碰撞,讓玩家能走過。
4. 不要新增 Script。
5. 不要把橋轉成普通 Model。
6. 完成後列出哪些部分會碰撞、哪些部分只是裝飾。
注意最後一點:不要把橋轉成普通 Model。
很多修正 prompt 如果寫得太模糊,AI 可能會用最簡單的方式直接改 generated output。短期看起來修好了,長期卻失去 procedural model 的價值。
所以每次修正都要保護這個條件:
保留它作為 ProceduralModel。
完成本章後,整理 Explorer:
AdventureIsland
World
Blockout_Parts
Visuals
ProceduralModels
RopeBridge_Prototype
如果未來你要複製第二座橋,可以先複製 RopeBridge_Prototype,再調整 attributes。
例如:
ProceduralModels
RopeBridge_MainPath
RopeBridge_SidePath
RopeBridge_RuinsEntrance
每座橋使用同一套生成邏輯,但 attributes 不同。
請為每座橋記錄:
Name
位置用途
BridgeLength
BridgeWidth
PlankCount
CableCount
是否已 Playtest
是否有 collision 問題
是否保留 generator module
這裡有一個重要取捨。
如果橋已經完全確定、不再需要調參,你可能會想把它轉成普通 Model 來避免未來誤改。
但在本書目前階段,先不要這麼做。
因為第 8 章還會加入互動,第 14 章以後可能調整任務路線,第 21 章還會做效能檢查。保留 procedural model 可以讓你更容易修改關卡空間。
本章的整理目標是:
可調模型集中管理
source 與 generated output 不混淆
attributes 有紀錄
Playtest 結果可追蹤
這一章,你用 /generate_procedural_model 建立了一個可調整的繩橋 prototype。
你學到:
ProceduralModel 是 parameter-driven Model。Attributes 是控制生成結果的重要介面。GeneratedFolder 裝的是生成結果,不是主要來源。MeshPart 適合固定形狀,procedural model 適合可重複規則。/generate_procedural_model 有 50 次 / 24 小時 rolling window 的限制,所以 prompt 要先想清楚。ProceduralModel 結構,不要把它退化成普通 Model。到這裡,AI Adventure Island 已經有:
下一章開始,場景不只會被觀看和走過,還會開始回應玩家。
我們會用 Assistant 建立第一批互動物件,拆解 ProximityPrompt、ClickDetector、Touched 這些常見互動方式,讓冒險島開始變成真正的遊戲。
嗨!我是 Wolke,曾任 Google Developer Expert(GDE,2019–2023) 與 LINE API Expert。
我熱衷於研究 AI Agent、n8n 自動化工作流與全端開發架構,致力於將 AI 技術轉化為真正能落地的生產力工具。
如果你喜歡這篇文章,歡迎透過以下方式與我交流:
📚 技術著作
《實用的 Gemini API 開發點子書》:帶你運用 Gemini App、Google AI Studio、Gemini CLI 與 Antigravity IDE,打造 AI Agent 與實用產品。
📝 技術部落格
歡迎追蹤我的 Medium,我會持續分享 Agentic Automation、架構設計與實際開發的踩坑心得。
🎤 技術講座與合作
我持續受邀至技術社群及研討會,分享 AI Agent、自動化工作流、DevOps 與全端開發實戰。
我曾於 DevOpsDays Taipei 2026 主講「不再只是寫腳本!讓 AI 代理人成為你的 SRE 最佳夥伴」工作坊。
如果你的企業、社群或學校正在尋找相關主題講者,歡迎私訊聯繫,洽談講座與工作坊合作!
🎮 我的 Roblox 遊戲
🎁 免費贈送 OpenAI 或 Claude AI 額度
為了鼓勵大家實際動手打造自己的 Roblox 體驗,我每個月會開放:
參加方式:
確認完成後,我會邀請你加入並設定 50 點額度。名額有限,歡迎把握機會!