iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
Software Development

Roblox Studio AI 協作開發大全系列 第 8

第 8 章:讓場景有互動

  • 分享至 

  • xImage
  •  

本章目標

到目前為止,AI Adventure Island 已經能走、能看、也有可調整的世界組件。

但它還沒有真正回應玩家。

玩家可以走到 NPC 旁邊,但 NPC 不會提示你可以交談。

玩家可以看到水晶,但水晶不會被收集。

玩家可以走到寶箱旁,但寶箱不會讓你打開。

這一章要建立第一批互動物件。

本章成果是讓玩家可以和至少三種場景物件互動:

  • NPC:靠近後顯示交談提示。
  • 寶箱:靠近後按住互動鍵,得到開啟回饋。
  • 水晶:碰到後有最小收集回饋。

這章會碰到 ProximityPromptClickDetectorTouched 和事件驅動。

但本章還不是完整 Script 教學。

第 9 章才會正式進入「第一次讓 Assistant 寫 Script」並逐行拆解。第 8 章只建立互動元件選型和最小可測行為。

你要先學會問這個問題:

這個物件應該用哪一種互動方式?

而不是一看到互動就要求 AI 寫一大段系統。

Assistant 在 Studio 中新增場景物件。

圖 8-1 Assistant 可以直接修改 DataModel;加入互動後要立即檢查新增物件、Script 位置與觸發條件。

Context Pack

本章依據以下 Roblox 官方文件撰寫:

官方 ProximityPrompt 文件的重點是:它讓玩家靠近 3D 物件時看到互動提示,並用鍵盤、gamepad 或觸控輸入觸發行為。

ProximityPrompt 的互動文字、物件名稱、輸入鍵與進度環等基本元素。

圖 8-2 ProximityPrompt 會自動呈現互動動作、目標名稱與裝置輸入提示;文字要短,並讓玩家一眼知道按下後會發生什麼。

事件文件則提醒:Roblox scripting 是 event-driven。

也就是說,遊戲不是每一幀都用同一段程式硬檢查所有事,而是許多物件和服務會在特定事情發生時 fire event。

例如:

玩家靠近並按下提示 = ProximityPrompt.Triggered
玩家點擊物件 = ClickDetector.MouseClick
玩家碰到 Part = BasePart.Touched

本章會先讓你看懂這三種互動入口。

真正的系統化 Script 會留到下一章。

開場情境

目前場景裡至少有:

AdventureIsland
  World
    Blockout_Parts
    Visuals
    ProceduralModels
  Collectibles
    Crystal_01
    Crystal_02
    Crystal_03
  NPCs
    NPC_QuestGiver_Placeholder

你可以再加入一個寶箱 placeholder:

AdventureIsland
  Interactables
    Chest_Starter

如果前面章節尚未建立 Interactables,這章會建立它。

本章要新增三種互動:

NPC_QuestGiver_Placeholder
  ProximityPrompt: Talk

Chest_Starter
  ProximityPrompt: Open

Crystal_01 / Crystal_02 / Crystal_03
  Touched: collect feedback

另外也會介紹 ClickDetector,但不把它當作本章主互動方式。

原因是 ProximityPrompt 對世界互動比較直覺:

  • 玩家靠近時才看到提示。
  • 提示會顯示對應輸入鍵。
  • 支援鍵盤、gamepad、觸控。
  • 可設定 hold duration。

ClickDetector 比較適合明確點擊、滑鼠導向、或工具型互動。

Touched 適合「碰到就發生」的物件,例如水晶、陷阱、傳送門入口。

選錯互動方式,後面會很難修。

第一個 Prompt

這次的 prompt 要求 Assistant 幫你建立互動骨架。

請輸入:

【Ch08 主任務|建立場景互動】
我正在製作 Roblox Studio 專案 AI Adventure Island。

目前 Workspace.AdventureIsland 裡已有:
- NPCs.NPC_QuestGiver_Placeholder
- Collectibles.Crystal_01 到 Crystal_03
- World.Blockout_Parts
- World.Visuals
- World.ProceduralModels

請幫我建立第一批可測試互動,但不要做完整任務、背包、資料保存或 UI HUD。

請完成:
1. 如果 AdventureIsland.Interactables 不存在,請建立 Folder。
2. 在 Interactables 裡建立一個簡單寶箱 placeholder,名稱為 Chest_Starter。
   - 使用 Model 或 Part 都可以,但名稱要清楚。
   - 放在 Path_03 或 NPC 附近,不要擋住主路線。
3. 在 NPC_QuestGiver_Placeholder 上加入 ProximityPrompt。
   - ObjectText = "Guide"
   - ActionText = "Talk"
   - MaxActivationDistance = 8
   - HoldDuration = 0
4. 在 Chest_Starter 上加入 ProximityPrompt。
   - ObjectText = "Chest"
   - ActionText = "Open"
   - MaxActivationDistance = 7
   - HoldDuration = 1.5
5. Crystal_01 到 Crystal_03 先使用 Touched 做最小收集回饋。
   - 不要建立正式背包或分數系統。
   - 只需要能在 Output 印出哪個玩家碰到哪個水晶。
   - 可以暫時讓水晶變透明或消失作為測試回饋。
6. 如果需要 Script,請放在 ServerScriptService,名稱清楚,例如 InteractionPrototype.server.lua。
7. Script 只做最小 prototype 回饋,不要做 DataStore、leaderstats、RemoteEvent 或大型架構。

完成後請列出:
- 新增了哪些 Instance
- 每個互動物件使用 ProximityPrompt、ClickDetector 或 Touched 的原因
- 每個互動要如何 Playtest
- 哪些部分下一章需要正式拆解 Script

這個 prompt 有幾個刻意限制:

  • 不做完整任務。
  • 不做背包。
  • 不做資料保存。
  • 不做 HUD。
  • 不做 RemoteEvent。
  • Script 只做 prototype feedback。

這些限制不是保守,而是讓章節焦點乾淨。

如果一次要求 Assistant 做「NPC 對話、任務、寶箱掉落、水晶收集、UI、存檔」,它很可能會產生一堆散落 Script。你會很難知道每個錯誤來自哪裡。

本章只要互動入口成立。

Assistant 可能產生的結果

完成後,你希望 Explorer 接近這樣:

Workspace
  AdventureIsland
    NPCs
      NPC_QuestGiver_Placeholder
        ProximityPrompt
    Collectibles
      Crystal_01
      Crystal_02
      Crystal_03
    Interactables
      Chest_Starter
        ProximityPrompt
    World
      Blockout_Parts
      Visuals
      ProceduralModels

ServerScriptService
  InteractionPrototype

如果 Assistant 把 prompt 放在 Attachment 下,也可以接受:

Chest_Starter
  PromptAttachment
    ProximityPrompt

官方 ProximityPrompt 教學也建議,把 prompt 放在 Attachment 可以更精準控制互動點位置。對門鎖、寶箱、NPC 頭上提示點,這通常比直接 parent 到整個 Model 更好。

你不希望看到:

Workspace
  Script
  Chest
  Prompt
  CrystalScript
  NPCScript
  LocalScript

或:

StarterGui
  HugeQuestUI
ReplicatedStorage
  RemoteEvent
ServerScriptService
  QuestSystem
  InventorySystem
  DataStoreSystem

這些可能之後會需要,但不是第 8 章。

本章要的只是:

玩家靠近物件 -> 看見提示
玩家按下互動 -> 有最小回饋
玩家碰到水晶 -> 有最小回饋

元件拆解

ProximityPrompt

ProximityPrompt 是本章最重要的元件。

它適合這種互動:

  • 跟 NPC 對話。
  • 打開寶箱。
  • 開門。
  • 拉開關。
  • 啟動祭壇。
  • 坐上椅子或載具。

它的優點是玩家靠近時才出現提示,而且 Roblox 會顯示對應輸入方式。

常用屬性如下:

ObjectText
ActionText
KeyboardKeyCode
GamepadKeyCode
MaxActivationDistance
HoldDuration
RequiresLineOfSight
ClickablePrompt

對本章的 NPC:

ObjectText = "Guide"
ActionText = "Talk"
MaxActivationDistance = 8
HoldDuration = 0

這代表玩家靠近 Guide 時,可以立刻按鍵交談。

對寶箱:

ObjectText = "Chest"
ActionText = "Open"
MaxActivationDistance = 7
HoldDuration = 1.5

寶箱使用 HoldDuration 是因為打開寶箱比單純交談更像一個需要確認的動作。玩家需要按住一小段時間,避免走過時誤觸。

這種設計其實就是遊戲 UX。

同樣都是互動,不同物件應該有不同的觸發節奏。

Attachment

ProximityPrompt 可以 parent 到 BasePartModelAttachment

本章初學時,直接放在 Part 或 Model 上最簡單。

但更精準的做法是放在 Attachment 上。

例如寶箱:

Chest_Starter
  PromptAttachment
    ProximityPrompt

你可以把 PromptAttachment 放在寶箱前方或上方,讓提示出現在玩家預期的位置。

對 NPC,也可以這樣:

NPC_QuestGiver_Placeholder
  PromptAttachment
    ProximityPrompt

如果 prompt 顯示位置怪怪的,不要急著改 Script。

先檢查:

  • prompt parent 到哪裡。
  • 是否有 Attachment
  • Attachment.Position 是否合理。
  • MaxActivationDistance 是否太遠或太近。
  • RequiresLineOfSight 是否導致玩家看不到提示。

很多互動問題其實是放置問題,不是程式問題。

ClickDetector

ClickDetector 讓 script 接收 3D 物件上的 pointer input。

它適合:

  • 滑鼠點擊的按鈕。
  • 桌面工具或測試用物件。
  • 很明確要用點擊操作的物件。

它支援 mouse,也可以在 touch device 觸發 click event,gamepad 也有基本支援。

但在本書的冒險島主線裡,NPC 和寶箱優先使用 ProximityPrompt

原因是:

  • ProximityPrompt 會顯示玩家應該按什麼。
  • ProximityPrompt 更適合靠近物件後互動。
  • ProximityPrompt 可以設定 hold duration。
  • ProximityPrompt 的跨裝置提示更直覺。

你可以把 ClickDetector 當成對照。

如果你想做一個測試按鈕,可以問 Assistant:

請在 AdventureIsland.Interactables 建立 DebugButton_01。
使用 ClickDetector,玩家點擊時只在 Output 印出玩家名稱。
這是測試用物件,不要接任務或獎勵。

但不要把所有互動都做成點擊。

在 3D 世界探索遊戲裡,玩家通常期待靠近物件後按提示鍵互動。

Touched

TouchedBasePart 的事件。

當一個 Part 因為物理移動碰到另一個 Part 時,Touched 會 fire。

它很適合用於:

  • 玩家碰到水晶就收集。
  • 玩家踩到陷阱。
  • 玩家進入傳送門區域。
  • 玩家穿過檢查點。

Touched 也容易誤觸。

原因是角色由多個身體 parts 組成,碰撞可能發生多次。背包道具、NPC、其他物理物件也可能碰到觸發區。

所以本章用 Touched 時,只做最小 prototype:

Crystal_01 touched by PlayerName

或讓水晶暫時變透明。

不要現在就做:

  • 加分系統。
  • 背包。
  • 每位玩家獨立收集狀態。
  • 重生邏輯。
  • DataStore。

這些會在後面章節逐步建立。

本章要你先知道:

Touched 適合碰到就發生,但需要小心重複觸發。

如果一個互動需要玩家明確決定,就不要用 Touched

例如跟 NPC 說話,不應該只靠碰到 NPC 就觸發。那會很容易造成干擾。

事件驅動

官方 events 文件說明,Roblox scripting 是 event-driven。

你可以把事件驅動理解成:

事情發生 -> Roblox fire event -> 你的 function 被呼叫

本章的三種互動都符合這個模式:

ProximityPrompt.Triggered
  玩家按下互動提示後 fire

ClickDetector.MouseClick
  玩家點擊物件後 fire

BasePart.Touched
  物件碰到其他 Part 後 fire

第 9 章會正式拆解 function、變數、Connect() 和 Output。

這一章先建立概念:

互動不是物件自己會動。
互動是某個事件發生後,有程式回應。

當你請 Assistant 做互動時,prompt 要說清楚:

  • 事件來源是什麼。
  • 誰可以觸發。
  • 觸發後做什麼最小回饋。
  • 目前不要做哪些系統。

這比只說「讓寶箱可以互動」更可靠。

Playtest

三種互動是否成立

現在進入 Play mode。

請依序測試:

NPC
- 玩家靠近 NPC 時是否出現 Talk prompt?
- 提示距離是否合理?
- 按下互動鍵後 Output 是否有回饋?
- 交談 prompt 是否不會在太遠處顯示?

Chest_Starter
- 玩家靠近寶箱時是否出現 Open prompt?
- 是否需要按住約 1.5 秒才觸發?
- 中途放開是否不觸發?
- 觸發後是否有 Output 或簡單視覺回饋?

Crystal_01 到 Crystal_03
- 玩家碰到水晶時是否有 Output?
- 是否只在玩家碰到時觸發,而不是其他物件碰到就觸發?
- 是否會重複觸發太多次?
- 暫時透明或消失後是否不影響其他水晶?

如果 prompt 沒出現,先檢查:

  • ProximityPrompt 是否 parent 到 BasePartModelAttachment
  • Model 是否需要 PrimaryPart。
  • MaxActivationDistance 是否太小。
  • RequiresLineOfSight 是否擋住顯示。
  • 物件是否在 Workspace 裡。

如果 Output 沒有任何回饋,檢查:

  • InteractionPrototype 是否在 ServerScriptService
  • Script 是否 enabled。
  • Assistant 是否把 Script 放錯地方。
  • prompt 名稱是否和 Script 裡查找的名稱一致。

如果水晶一直重複觸發,先記錄這個問題。

不要急著做完整防重複收集系統。

下一章會開始整理 Script,後面玩家資料與收集狀態會再處理。

修正 Prompt

如果 NPC prompt 沒出現,可以用:

【Ch08 修正 1|顯示 NPC 互動提示】
NPC_QuestGiver_Placeholder 的 ProximityPrompt 沒有出現。

請只檢查這個 NPC 的 prompt 設定:
1. ProximityPrompt 是否 parent 到 BasePart、Model 或 Attachment。
2. 如果 parent 到 Model,請確認是否需要 PrimaryPart。
3. MaxActivationDistance 是否合理,請設為 8。
4. RequiresLineOfSight 是否造成提示看不到;若有必要,請調整。
5. 不要新增任務系統或 UI。
6. 完成後列出你修改了哪些 Instance 和 Properties。

如果寶箱互動太快,可以用:

【Ch08 修正 2|調整寶箱互動距離】
Chest_Starter 的互動太容易誤觸。

請調整它的 ProximityPrompt:
1. ObjectText = "Chest"
2. ActionText = "Open"
3. MaxActivationDistance = 7
4. HoldDuration = 1.5
5. 不要改動位置、外觀或新增其他系統。
6. 完成後告訴我 Playtest 時要如何確認 hold 行為。

如果水晶重複觸發太多次,可以用:

【Ch08 修正 3|限制水晶重複觸發】
Crystal_01 到 Crystal_03 的 Touched prototype 會重複觸發太多次。

請在目前的 InteractionPrototype 裡加入最小 debounce。
限制:
1. 這仍然只是 prototype。
2. 不要建立正式玩家背包、leaderstats 或 DataStore。
3. 每顆水晶被觸發後,暫時只讓它變透明或停用觸碰。
4. 請解釋你如何避免同一顆水晶被連續觸發。
5. 下一章會再正式拆解 Script,所以請保持程式簡短。

如果 Assistant 一次加太多系統,可以用:

【Ch08 修正 4|縮回互動原型範圍】
你新增了太多超出本章範圍的系統。

請把本章互動縮回 prototype:
1. 保留 NPC 的 Talk ProximityPrompt。
2. 保留 Chest_Starter 的 Open ProximityPrompt。
3. 保留 Crystal 的 Touched 最小回饋。
4. 移除或不要使用 DataStore、leaderstats、Inventory、Quest UI、RemoteEvent。
5. 保留一個簡單的 InteractionPrototype server script 即可。
6. 完成後列出保留與移除的內容。

這些修正 prompt 的重點是維持章節邊界。

AI 很容易因為「互動」這個詞開始生成完整遊戲系統。

但你現在只需要可測互動入口。

工程整理

完成本章後,建議 Explorer 結構如下:

Workspace
  AdventureIsland
    NPCs
      NPC_QuestGiver_Placeholder
        PromptAttachment
          ProximityPrompt
    Collectibles
      Crystal_01
      Crystal_02
      Crystal_03
    Interactables
      Chest_Starter
        PromptAttachment
          ProximityPrompt
    World
      Blockout_Parts
      Visuals
      ProceduralModels

ServerScriptService
  InteractionPrototype

整理時請記錄互動表:

Object: NPC_QuestGiver_Placeholder
Interaction: ProximityPrompt
ActionText: Talk
Distance: 8
Prototype feedback: Output print
Next: NPC dialogue / quest system

Object: Chest_Starter
Interaction: ProximityPrompt
ActionText: Open
Distance: 7
HoldDuration: 1.5
Prototype feedback: Output print or simple visual change
Next: reward system

Object: Crystal_01-03
Interaction: Touched
Prototype feedback: Output print / temporary disappear
Next: collect system / player state

這份表後面會很有用。

第 9 章開始,你會看 Assistant 寫的 Script。

第 10 章會做玩家資料與狀態。

第 14 章會做任務系統。

如果現在不記錄互動來源,後面很容易忘記某個功能是靠 prompt、click 還是 touched 觸發。

本章總結

這一章,你讓 AI Adventure Island 第一次開始回應玩家。

你學到:

  • ProximityPrompt 適合 NPC、寶箱、門、開關這類明確互動。
  • Attachment 可以控制 prompt 顯示和互動位置。
  • ClickDetector 適合點擊導向的 3D 物件,但不應成為所有世界互動的預設答案。
  • Touched 適合碰到就發生的物件,例如水晶、陷阱、傳送區。
  • Roblox 互動是 event-driven:事件發生後,程式才回應。
  • Prompt 要清楚指定互動方式、觸發條件、最小回饋,以及不要做哪些大型系統。

到這裡,第二部完成了從場景到互動入口的主線:

  • 第 5 章:建立可玩的灰盒關卡。
  • 第 6 章:加入材質、模型與視覺風格。
  • 第 7 章:建立可調整 procedural model。
  • 第 8 章:加入第一批可測互動。

下一章開始,書會進入第三部:從物件變成遊戲系統。

我們會正式看 Assistant 寫出的 Script,逐行拆解事件、函式、變數、Output 與最小遊戲行為。


關於 Wolke

嗨!我是 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 體驗,我每個月會開放:

  • 10 個名額
  • 每人 50 點 AI 額度
  • 名額送完為止

參加方式:

  1. 訂閱本系列文章。
  2. 分享任一篇系列文章。
  3. 私訊分享截圖及你的 AI 帳號 Email。

確認完成後,我會邀請你加入並設定 50 點額度。名額有限,歡迎把握機會!


上一篇
第 7 章:Procedural Model:可調整的 AI 模型
下一篇
第 9 章:第一次讓 Assistant 寫 Script
系列文
Roblox Studio AI 協作開發大全9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言