1. 从空文件夹到可玩原型:这套组合到底在做什么
一个空文件夹,几段自然语言描述,最后跑起来一个能操控角色移动、能触发碰撞、能播放动画的 Unity 游戏原型——这件事在 2024 年之前听起来像是天方夜谭,但现在确实有人跑通了。核心工具链就三样:Claude Code作为终端里的 AI 编程代理,MCP(Model Context Protocol)作为连接 AI 与外部工具的协议层,Unity作为最终运行游戏引擎的宿主环境。
我第一次看到这个组合的时候,直觉反应是"这不就是把 ChatGPT 塞进终端里写 C# 脚本吗",但实际跑过一遍之后发现完全不是一回事。传统的 AI 辅助写代码,是你问它答,你复制粘贴,你手动创建文件、手动挂载脚本、手动配置场景。而 Claude Code + MCP 的组合,是 AI 直接在你的项目目录里创建文件、修改文件、执行命令、读取 Unity 的运行时状态,整个过程你只需要在终端里用自然语言下指令。
这套流程解决的核心痛点是:Unity 项目初始化的重复劳动太多。新建一个 3D 项目,光是搭一个能跑能跳的角色控制器,就要创建 Player 脚本、配置 CharacterController 组件、设置输入映射、调整摄像机跟随、处理地面碰撞层。这些工作没有任何创造性,但一个熟练的 Unity 开发者也要花 20 到 40 分钟。而通过 Claude Code + MCP,这个时间可以压缩到几分钟,且全程不需要离开终端。
适合谁来参考这套方案?三类人收益最明显。第一类是刚入门 Unity 但已经有编程基础的人,他们知道怎么写逻辑,但不熟悉 Unity 的组件系统和编辑器操作,AI 可以帮他们跳过大量查文档的时间。第二类是做快速原型验证的独立开发者,需要在一个下午内验证三四个玩法点子,没时间手搓脚手架。第三类是想了解 MCP 协议实际落地场景的技术人,Unity 这个案例比传统的"AI 查数据库"更直观,因为你能亲眼看到 AI 操作一个真实的三维场景。
但必须提前说清楚:这套方案不能替代你理解 Unity。AI 生成的代码经常有微妙的组件引用错误、坐标系混淆、生命周期顺序问题,如果你看不懂 C# 和 Unity 的基本概念,排查起来会比手写还慢。它是加速器,不是替代品。
2. 工具链拆解:Claude Code、MCP、Unity 各自扮演什么角色
2.1 Claude Code 不是聊天窗口,是终端里的执行代理
很多人第一次接触 Claude Code 会误以为它是"命令行版的 Claude 聊天"。实际上它的定位是agentic coding tool,核心能力是在本地文件系统里自主执行多步操作。你给它一个任务,它会自己决定:先读哪些文件、再创建哪些文件、然后运行什么命令验证、发现报错后怎么修。
它的工作模式大致是这样:你在项目根目录运行claude命令进入交互界面,然后用自然语言描述需求。它会调用内置工具(读文件、写文件、执行 bash 命令、搜索代码库)来完成任务。关键在于它有上下文记忆,能记住你前面让它创建的 Player.cs 里定义了哪些方法,后面让它写 GameManager 时就会自动引用正确的类名。
安装方式在不同系统上略有差异。macOS 和 Linux 下通常通过 npm 全局安装:
npm install -g @anthropic-ai/claude-codeWindows 下建议在 WSL2 里操作,因为 Claude Code 对 bash 命令的依赖较重,原生 PowerShell 环境下某些命令会不兼容。安装完成后在项目目录执行claude即可启动。首次使用需要配置 API 凭证,这一步官方文档写得很清楚,按提示走就行。
注意:Claude Code 默认会在当前工作目录及其子目录内操作文件。启动前务必确认你在正确的项目文件夹里,否则它可能修改到无关文件。我习惯在启动前先
pwd确认一下路径。
2.2 MCP 协议:让 AI 长出"手"和"眼睛"
MCP 全称 Model Context Protocol,直译是"模型上下文协议"。用生活化的类比:Claude Code 是大脑,MCP 是神经末梢。大脑再聪明,如果没有神经连接到手脚,也没法操作现实世界。MCP 定义了一套标准接口,让 AI 模型能够调用外部工具、读取外部资源。
在 Unity 这个场景里,MCP 的价值体现在两个方向。读方向:AI 可以通过 MCP server 读取 Unity 编辑器的当前状态,比如场景里有哪些 GameObject、某个组件的参数值是多少、控制台有没有报错。写方向:AI 可以通过 MCP 直接操作 Unity 编辑器,比如创建 GameObject、添加组件、修改 Transform、保存场景。
MCP 的架构是 client-server 模式。Claude Code 作为 MCP client,Unity 侧需要一个 MCP server 来桥接。这个 server 通常是一个独立的进程,通过 Unity 的 Editor 扩展接口(EditorWindow、MenuItem、EditorApplication 等)与编辑器通信,同时通过 stdio 或 HTTP 与 Claude Code 通信。
配置 MCP server 的典型方式是在 Claude Code 的配置文件里声明。配置文件通常位于~/.claude.json或项目级的.mcp.json:
{ "mcpServers": { "unity": { "command": "node", "args": ["/path/to/unity-mcp-server/index.js"], "env": { "UNITY_PROJECT_PATH": "/path/to/your/unity/project" } } } }配置完成后重启 Claude Code,它会自动加载这个 server 并暴露其提供的工具。你可以在对话里问它"你现在能用哪些 Unity 相关的工具",它会列出可用的 MCP 工具清单。
2.3 Unity 侧的准备:版本选择和项目结构
Unity 版本选择上,推荐 Unity 6 或 2022 LTS。Unity 6 对 GPU Skinning 和渲染管线做了大量优化,跑 AI 生成的示例场景更流畅;2022 LTS 则是生态最稳定的版本,第三方插件兼容性最好。不建议用 2018 或更早的版本,因为部分 C# 语法特性和 API 在旧版本里不存在,AI 生成的代码可能编译不过。
项目结构上,建议在创建项目时就规划好目录:
Assets/ Scripts/ Player/ Managers/ UI/ Scenes/ Prefabs/ Materials/ Animations/这个结构不是强制的,但 AI 在生成代码时如果看到清晰的目录结构,会更准确地判断文件应该放在哪里。我试过在混乱的项目里让 AI 创建脚本,它经常把文件丢在 Assets 根目录,后期整理很麻烦。
另外要确保 Unity 项目开启了API Compatibility Level 为 .NET Standard 2.1 或 .NET Framework,在 Player Settings 里可以找到。这个设置影响 AI 生成的代码能否使用某些现代 C# 特性。
3. 实操全流程:从零到可玩原型的每一步
3.1 环境搭建与验证清单
在开始让 AI 写游戏之前,先把环境跑通。这一步不能省,否则后面出问题你分不清是环境问题还是代码问题。
第一步,确认 Node.js 版本在 18 以上,执行node -v查看。MCP server 大多基于 Node 实现,版本太低会报语法错误。
第二步,安装 Claude Code 并完成 API 配置。执行claude --version能输出版本号说明安装成功。
第三步,在 Unity 里安装 MCP 桥接插件。目前社区有几个开源实现,核心原理都是在 Unity Editor 里启动一个本地服务,监听来自 Claude Code 的请求。安装方式通常是把插件包拖进 Assets 目录,然后在菜单栏会出现对应的配置入口。
第四步,验证连通性。在 Claude Code 里输入"列出当前 Unity 场景中的所有 GameObject",如果它能返回场景里的对象列表(新建项目默认有 Main Camera 和 Directional Light),说明 MCP 通道打通了。
实操心得:这一步最容易卡在端口占用上。MCP server 默认监听的端口如果被其他程序占用,连接会静默失败。我遇到过 Unity 插件显示"已启动"但 Claude Code 读不到场景的情况,最后发现是端口冲突。建议在插件配置里换一个不常用的端口,比如 17890。
3.2 用自然语言描述游戏需求
环境通了之后,就可以开始"描述游戏"了。这里有个关键技巧:描述要分层,不要一次性把所有需求倒给 AI。我试过一上来就说"做一个第三人称动作游戏,有连招、有敌人 AI、有装备系统",结果 AI 生成了一堆互相引用但跑不起来的脚本。正确的做法是按依赖顺序分步来。
第一层描述:场景基础。"在当前场景创建一个平面作为地面,尺寸 20x20,创建一个胶囊体作为玩家,位置在原点上方 1 单位处。"
第二层描述:玩家控制。"给玩家胶囊体添加 CharacterController 组件,写一个 PlayerController 脚本,实现 WASD 移动和空格跳跃,移动速度 5,跳跃高度 2。"
第三层描述:摄像机跟随。"创建一个 CameraFollow 脚本挂到主摄像机上,让摄像机始终在玩家后方 5 单位、上方 3 单位的位置,看向玩家。"
第四层描述:交互元素。"在场景里随机放置 5 个立方体作为可收集物,玩家碰到后立方体消失,控制台打印收集数量。"
每一层描述完,让 AI 执行并验证,确认没问题再进行下一层。这样即使出错,排查范围也很小。
3.3 关键脚本的生成与调试
以 PlayerController 为例,AI 生成的代码大致长这样:
using UnityEngine; public class PlayerController : MonoBehaviour { public float moveSpeed = 5f; public float jumpHeight = 2f; public float gravity = -9.81f; private CharacterController controller; private Vector3 velocity; private bool isGrounded; void Start() { controller = GetComponent<CharacterController>(); } void Update() { isGrounded = controller.isGrounded; if (isGrounded && velocity.y < 0) { velocity.y = -2f; } float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); Vector3 move = transform.right * x + transform.forward * z; controller.Move(move * moveSpeed * Time.deltaTime); if (Input.GetButtonDown("Jump") && isGrounded) { velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); } velocity.y += gravity * Time.deltaTime; controller.Move(velocity * Time.deltaTime); } }这段代码有几个值得注意的点。velocity.y = -2f这个看似奇怪的赋值,是为了让 CharacterController 在地面上保持一个微小的向下速度,确保isGrounded检测稳定。如果直接设为 0,角色在斜坡上会反复触发"离地-落地"状态。跳跃速度用Mathf.Sqrt(jumpHeight * -2f * gravity)计算,这是从物理公式v = sqrt(2gh)推导出来的,保证跳跃高度精确等于 jumpHeight。
AI 生成这段代码后,通常会自己执行验证:检查脚本是否编译通过、是否挂载到了正确的 GameObject 上。如果 Unity 控制台有报错,它会读取报错信息并尝试修复。我见过它自己发现"CharacterController 组件未添加"然后自动补上的情况,这个闭环能力是它和普通代码生成最大的区别。
3.4 场景组装与运行验证
脚本写完后,让 AI 通过 MCP 完成场景组装。这一步的指令可以很具体:"把 PlayerController 脚本挂到名为 Player 的胶囊体上,把 CameraFollow 挂到 Main Camera 上,把 CameraFollow 的 target 字段设为 Player 的 Transform。"
AI 会调用 MCP 工具执行这些操作。执行完后,你在 Unity 编辑器里应该能看到组件已经正确挂载,字段引用也填好了。然后点击 Play 按钮,用 WASD 控制角色移动,空格跳跃,碰到立方体后立方体消失。
如果运行时报错,比如"NullReferenceException",把报错信息直接贴给 Claude Code,它会分析是哪个引用为空,然后通过 MCP 检查场景里的实际引用关系,给出修复方案。这个"报错-分析-修复"的循环,是这套工作流最提效的部分。
4. 踩坑记录与常见问题排查
4.1 MCP 连接类问题
问题一:Claude Code 显示 MCP server 已连接,但调用工具时报"tool not found"。
这种情况通常是 server 启动成功但工具注册失败。排查思路:先看 MCP server 的日志输出(通常在启动时的终端窗口里),确认它注册了哪些工具。如果工具列表为空,检查 Unity 插件是否真的在运行。我遇到过一次是 Unity 编辑器处于 Play 模式,插件暂停了响应,退出 Play 模式后恢复正常。
问题二:AI 读取到的场景状态和编辑器里看到的不一致。
这是缓存问题。MCP server 可能缓存了场景的序列化数据,而编辑器里的修改还没触发重新序列化。解决办法是在 Unity 里手动保存场景(Ctrl+S),然后让 AI 重新读取。或者在 MCP server 配置里关闭缓存。
问题三:生成的脚本编译报错,提示找不到某个命名空间。
Unity 不同版本、不同渲染管线下的命名空间有差异。比如 URP 项目里UnityEngine.Rendering.Universal才可用,内置管线项目里引用它会报错。遇到这种情况,直接告诉 AI"这个项目用的是内置渲染管线",它会调整代码。
4.2 代码逻辑类问题
问题四:角色移动方向不对,按 W 往后退。
这是坐标系问题。Unity 里transform.forward是物体自身的朝向,如果胶囊体的旋转不是初始状态,移动方向就会偏。让 AI 检查 Player 的 Rotation 是否为 (0,0,0),或者在代码里用Camera.main.transform.forward替代transform.forward来做相机相对移动。
问题五:跳跃后角色缓慢下沉,不回到地面。
检查 CharacterController 的skinWidth参数,默认 0.08 有时会导致穿透。另外确认地面碰撞体确实存在且 Layer 设置正确。我踩过一次坑是地面用了 Terrain 但没加 Terrain Collider,角色直接穿下去了。
问题六:收集物碰撞检测不触发。
确认立方体上有 Collider,且至少一方有 Rigidbody。CharacterController 本身不算 Rigidbody,所以如果立方体是静态的,需要在立方体上加isTrigger的 Collider,然后在 Player 脚本里用OnTriggerEnter检测。AI 有时会默认用OnCollisionEnter,但 CharacterController 不触发这个回调,需要明确告诉它用 Trigger。
4.3 性能与内存类问题
问题七:粒子特效播放后内存持续增长。
这是热词里提到的"粒子特效内存泄露"的典型场景。AI 生成的粒子系统如果设置了loop=true且没有正确的销毁逻辑,粒子会无限累积。让 AI 检查 ParticleSystem 的配置,确保Stop Action设为Destroy或Disable,并在不需要时调用Stop()。
问题八:场景里对象太多导致编辑器卡顿。
AI 批量生成对象时可能没有做对象池或分批处理。如果它一次性创建了几百个 GameObject,编辑器会明显卡顿。解决办法是让 AI 改用对象池模式,或者减少单次生成数量。
4.4 常见问题速查表
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| MCP 工具调用无响应 | 端口冲突或 Unity 未运行 | 检查端口占用,确认 Unity 编辑器已打开 |
| 脚本编译报错找不到类型 | 渲染管线命名空间不匹配 | 告知 AI 当前管线类型 |
| 角色穿地 | 地面无 Collider 或 skinWidth 过小 | 检查地面组件,调整 skinWidth |
| 碰撞不触发 | 用了 OnCollisionEnter 但对象是 Trigger | 改用 OnTriggerEnter |
| 内存持续增长 | 粒子或对象未销毁 | 检查 Stop Action 和销毁逻辑 |
| AI 读不到最新场景 | 场景未保存导致缓存过期 | 手动保存场景后重试 |
独家避坑技巧:每次让 AI 做较大改动之前,先在 Unity 里手动保存场景并提交一次版本控制(git commit)。AI 的操作虽然大多可逆,但批量修改后想回滚到某个中间状态会很麻烦。我习惯在让 AI 生成新功能前打一个 tag,出问题直接 reset。
5. 这套工作流的边界与扩展方向
5.1 它擅长什么,不擅长什么
跑了几个原型之后,我对这套组合的能力边界有了比较清晰的认识。擅长的部分:脚手架搭建、重复性代码生成、API 用法查询、简单逻辑实现、报错定位。这些任务有明确的模式,AI 见过大量类似代码,生成质量很高。
不擅长的部分:复杂的游戏手感调优(比如跳跃的 coyote time、跳跃缓冲这些需要反复试玩的细节)、美术相关的 Shader 编写(尤其是二次元 Shader 这种需要艺术直觉的)、大型项目的架构设计(AI 容易过度设计或设计不足)。这些还是得人来主导,AI 做辅助。
还有一个隐性限制是上下文窗口。当项目文件多到一定程度,Claude Code 无法一次性读取所有相关文件,它可能会遗漏某些依赖关系。这时候需要你手动指定关键文件,或者把项目拆分成更小的模块分别处理。
5.2 可以继续扩展的方向
这套工作流跑通基础原型后,有几个自然的扩展方向。接入本地模型:Claude Code 支持通过配置切换到本地运行的模型(比如通过 LM Studio 暴露的接口),这样在无网络环境下也能用,代价是生成质量会下降。接入 Figma MCP:如果游戏 UI 先在 Figma 里设计,可以通过 Figma 的 MCP server 让 AI 直接读取设计稿的布局信息,生成对应的 UGUI 层级结构。接入版本控制 MCP:让 AI 在完成一个功能后自动 commit,并生成有意义的 commit message。
Unity 侧还可以扩展的方向包括:让 AI 通过 MCP 操作 Timeline 制作简单过场动画、批量生成地形植被、根据配置表自动生成 UI 预制体。这些场景的共同点是有明确的输入输出规范,AI 执行起来准确率很高。
5.3 关于 MCP 协议本身的一点观察
MCP 这个协议的设计思路值得单独说一下。它把"AI 能做什么"和"AI 怎么连到外部系统"解耦了。以前给 AI 加一个新能力,要改模型、改 prompt、改工具调用逻辑;现在只需要写一个 MCP server,声明它提供哪些工具,任何支持 MCP 的 client 都能用。这个抽象层让工具生态的扩展成本大幅降低。
在 Unity 这个案例里,MCP server 本质上是一个编辑器扩展 + 本地服务的组合。编辑器扩展负责在 Unity 内部执行操作,本地服务负责和 Claude Code 通信。这个模式可以复制到任何有编辑器扩展机制的软件上,比如 Blender、Unreal、甚至 Photoshop。热词里出现的"unreal 5.8 mcp"就是这个思路在 Unreal 上的应用。
我个人的判断是,MCP 这类协议会逐渐成为 AI 工具链的标准配置。现在还在早期,各种 server 的质量参差不齐,配置也偏手动。但随着生态成熟,未来可能是"装一个插件,AI 就能操作这个软件"的体验。对于开发者来说,现在花点时间理解 MCP 的工作原理,是在为下一波工具变革做准备。
最后分享一个我在实际使用中的小技巧:把常用的 MCP 操作组合成自定义命令。比如"初始化玩家"这个操作包含创建胶囊体、添加 CharacterController、挂载脚本、配置摄像机跟随这一系列步骤,每次手动描述很啰嗦。Claude Code 支持在项目里定义自定义命令文件,把这些步骤固化下来,下次一句话就能触发整套流程。这个技巧在反复创建测试场景时特别省时间。