← 返回博客

用 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

你可能还会喜欢这些文章