← 返回部落格

用 Unity MCP 做 3D RPG:第三人稱、戰鬥與任務怎麼落地

以可演示的 3D RPG 原型為目標:在 Cursor 等 AI IDE 中透過 Unity MCP 推進角色控制、即時戰鬥、敵人狀態機與任務接線;成品 UI 需要時再處理介面匯出。

發布於
  • Unity MCP
  • 3D RPG
  • Unity
  • combat
  • AI game development

一款能給人試玩的 3D RPG 原型,通常要先跑通這些模組:可調的第三人稱移動與鏡頭、至少一輪即時近戰、一個帶狀態機的敵人、一個可觸發的任務/對話,以及能反映血量或任務進度的 HUD。下面按實作順序寫,預設你在 Cursor、Claude Code 或 Codex 等支援 MCP 的 AI IDE 裡,透過 Unity MCP 讀寫已開啟的 Unity 工程(場景、GameObject、C#),而不只是往磁碟裡貼腳本。

安裝與連線見:Unity MCP 安裝教學。相容範圍以官網為準(常見為 Unity 2022.3+ / Unity 6)。

先定最小可玩範圍

建議第一版只驗收:

  1. 玩家 WASD 移動、滑鼠視角、跳躍;地面與斜坡基本穩定
  2. 一次近戰攻擊(動畫可先佔位),能打中帶 Collider 的敵人並扣血
  3. 一個敵人:巡邏 → 發現玩家 → 追逐 / 攻擊;死亡後停用或銷毀
  4. 一個 NPC:靠近觸發對話或接取任務;任務目標「擊敗該敵人」完成後更新日誌
  5. 簡單 HUD:血條 + 當前任務一行字

場景美術可以先用原色方塊與平面地面;主選單、背包格、精緻 HUD 等介面要像樣時,再單獨走 UI 流程(見後文)。

工程與 MCP 準備

開始寫玩法前確認:

  • Unity 工程已開啟,目標場景可 Play
  • Unity MCP Server 在跑,AI IDE 裡能列出當前 Hierarchy 根物件(唯讀冒煙)
  • 版本管理已提交一次基線;大改前再 commit

唯讀驗證示例:

列出當前活動場景的根級 GameObject,不要修改任何內容。

通過後再做寫入。MCP 橋接保持本機 localhost,不要把連接埠暴露到公網。更細的客戶端提示寫法見:用 Claude Code 與 Cursor 操作 Unity MCP

玩家:第三人稱控制先跑通

推薦最小骨架(命名可按專案習慣改):

Player
├── CharacterController 或 Rigidbody + CapsuleCollider
├── CameraPivot(Yaw)
│   └── CameraArm(Pitch)→ Main Camera
└── AttackHitbox(觸發器,預設關閉)

對 MCP 下意圖時寫清輸入、相機與腳本路徑,例如:

建立 Assets/Scripts/Player/PlayerController.cs:第三人稱;WASD 相對相機平面移動;滑鼠控制 yaw/pitch(pitch 限制 -30°~60°);空白鍵跳躍;腳本掛到 Player。地面用 CharacterController.isGrounded 或等價偵測。

再調手感:

移動速度約 5,加速度平滑一點;跳躍高度約 1.2m;相機跟隨有輕微阻尼,避免瞬間甩尾。

審查重點:斜坡是否打滑、空中轉向是否過猛、相機是否穿模。這些比「腳本是否生成成功」更決定 RPG 探索手感。

戰鬥:先做可驗收的近戰一輪

第一版不要上複雜技能樹。目標是:按下攻擊 → 開 Hitbox 若干幀 → 對敵人造成傷害 → 刷新 HUD

示例提示:

為 Player 加 PlayerCombat.cs:滑鼠左鍵攻擊,冷卻 0.6s;攻擊視窗內啟用 AttackHitbox;對帶 IDamageable 的目標造成 15 點傷害。敵人實作 IDamageable 與當前生命值。

可選增強(仍保持簡單):

攻擊時短暫鎖移動;命中時對敵人施加短硬直;玩家受傷後 0.4s 無敵閃爍。

把血量變化做成事件或回呼,方便後面綁 HUD,避免在 UI 腳本裡硬查 Find

敵人:Idle / Patrol / Chase / Attack 即可

第一版不必上行為樹。四態足夠跑通「野外怪」:

Idle → Patrol → Chase → Attack
         ↑________________↓(失去目標)

示例提示:

Assets/Scripts/Enemy/EnemyAI.cs:兩點巡邏;玩家進入 12m 進入 Chase;進入 2m 進入 Attack(冷卻 1.2s,傷害 8);失去玩家 3s 回 Patrol;生命歸零後播死亡或直接 SetActive(false)

導航:有 NavMesh 就用 NavMeshAgent;沒有就先用簡易朝向移動,避免第一週卡在烘焙上。動畫有就接 Animator,沒有就靠朝向與色塊回饋。

任務與 NPC:一條主線就夠

RPG 原型的「任務感」來自 可觸發 → 可追蹤 → 可完成,不是任務編輯器本身。

最小資料可以很樸素:

  • QuestId、標題、描述、目標計數、是否完成
  • NPC 上的 Interact(按 E 或觸發器)開啟對話並 StartQuest
  • 敵人死亡時 QuestManager.NotifyKill(enemyId)

示例提示:

建立 QuestManager 單例:接取任務 slay_wolf_01(擊敗 1 隻 Wolf);Wolf 死亡時推進進度;完成後更新任務日誌文案。場景中 Wizard NPC:玩家進入 Trigger 按 E 開始該任務。

對話第一版用 Text / TMP 即可;分支對話以後再加。

HUD:先佔位,再考慮成品介面

玩法未通前,用引擎裡的 Slider / TMP_Text 佔位,並用 MCP 接線:

把玩家 OnHealthChanged 綁到 HUD 血條;把 QuestManager 當前任務標題綁到螢幕上方一行 TMP。

當主選單、背包、精緻技能欄需要設計稿級 UI(分層 PSD / Figma、自然語言生成面板、拆分後匯出 Unity 預製體)時,再引入畫布工具 AI Studio

  1. 生成或匯入 RPG HUD / 選單
  2. 元件化後匯出到例如 Assets/UI/
  3. 回到 AI IDE + Unity MCP,把按鈕、血條、任務條接到已有玩法事件

複雜去背可先處理 Alpha,再整理進引擎。介面結構可以在畫布完成;互動綁定與戰鬥邏輯仍在 Unity 側經 MCP 完成——不要指望畫布產品寫出完整的戰鬥狀態機。

設計稿進 Unity 的細流程見:Figma 到 Unity UI

推薦推進順序

MCP:玩家控制 → 近戰一輪 → 一敵狀態機 → 一任務 + NPC

MCP:佔位 HUD 接線(血量 / 任務行)
        ↓(可選)
畫布工具:成品選單 / HUD → 匯出 Unity

MCP:把成品 UI 接到已有事件

改手感、數值、AI、導航 → 繼續用 Unity MCP。
改整屏視覺層級、換皮、重匯出預製體 → 再回畫布工具。

給模型的提示要寫清邊界

效果差時,多半是提示太寬。可固定這幾條:

  • 路徑與掛點:腳本落到哪個資料夾、掛到哪個物件
  • 驗收標準:例如「Play 後 10 秒內能打死一隻狼並看到任務完成」
  • 禁止範圍:例如「不要重構全部輸入系統;不要刪除現有相機」
  • 一次一事:先控制,再戰鬥,再敵人,避免一條提示改半個工程

生成後務必自己 Play 驗收;MCP 省的是重複點選,不是跳過設計判斷。

驗收清單

  • 第三人稱移動與鏡頭可連續玩 2 分鐘無明顯穿透/失控
  • 近戰能穩定命中,冷卻可感知
  • 敵人巡邏與追逐可區分,死亡有明確回饋
  • 任務可接取、可完成、HUD 文案會變
  • 血量變化能反映到 UI(佔位亦可)

下一步

  1. 完成 Unity MCP 安裝教學 並做唯讀冒煙
  2. 按上文順序打通「移動 + 一怪 + 一任務」
  3. 需要成品介面時,再處理 UI 匯出與接線

延伸閱讀:Claude Code / Cursor 操作 Unity MCPFigma 到 Unity UI

你可能還會喜歡這些文章