当前位置:首页 > 编程开发

AI 使用 Unity MCP 自动操作 Unity:从连接配置到生成五子棋场景的实战记录

webgou5个月前 (06-26)编程开发284


最近测试了一下 Unity MCP,也就是通过 Model Context Protocol 让 AI 直接和 Unity Editor 通信。

它的核心价值很简单:AI 不再只是“给你写一段代码”,而是可以直接读取 Unity 当前场景、创建对象、写脚本、刷新编译、进入 Play Mode 验证结果,甚至检查 Console 错误。

这篇文章记录一次完整的实测流程:从启动 MCP Server,到 Unity 插件连接,再到让 AI 在 Unity 场景里创建一个单机五子棋 Demo。

测试环境

本次测试环境如下:

  • Unity 版本:2022.3.14f1c1

  • MCP for Unity:9.6.8

  • MCP Server:mcpforunityserver==9.6.8

  • 通信方式:HTTP + WebSocket

  • Server 地址:http://127.0.0.1:8756

启动命令:

C:\Users\11929\.local\bin\uvx.exe --from "mcpforunityserver==9.6.8" mcp-for-unity --transport http --http-url http://127.0.0.1:8756 --project-scoped-tools

启动成功后,终端会显示 FastMCP Server 正在运行:

Uvicorn running on http://127.0.0.1:8756

Unity 插件连接成功时,可以看到类似日志:

Plugin registered: Game (b1b111f65ef61b01)
Registered 30 tools for session
Server-level tool visibility synced from Unity

这说明 Unity Editor 已经通过 WebSocket 连上 MCP Server。

MCP 连接验证

连接成功后,可以通过接口确认 MCP Server 和 Unity 实例状态。

健康检查地址:

http://127.0.0.1:8756/health

返回示例:

{
  "status": "healthy",
  "version": "9.6.8",
  "message": "MCP for Unity server is running"
}

实例列表地址:

http://127.0.0.1:8756/api/instances

返回中可以看到 Unity 工程:

{
  "project": "Game",
  "hash": "b1b111f65ef61b01",
  "unity_version": "2022.3.14f1c1"
}

这一步很关键。如果 instances 是空数组,说明 Server 虽然启动了,但 Unity 插件还没有连接上。

使用 AI 创建测试场景

连接完成后,AI 就可以调用 Unity MCP 工具创建场景。

本次测试新建了一个场景:

Assets/GameMain/Scenes/MCP_TestScene.unity

然后通过 manage_scene 读取当前场景层级,确认场景已经创建成功。

最初测试时,我让 AI 创建了一个 Cube。这里发现了一个有意思的问题:使用 manage_gameobject 的 primitive_type="Cube" 时,对象创建成功,但在当前工程里它只带了 Transform,没有 MeshFilter / MeshRenderer / BoxCollider。

后来改用 Unity 原生命令:

GameObject/3D Object/Cube

再修改对象名称和位置,就可以得到完整 Cube:

Transform
MeshFilter
MeshRenderer
BoxCollider

这也说明 MCP 工具虽然很方便,但实际开发中仍然需要验证结果,不能盲信每一步调用都完全符合预期。

让 AI 写一个单机五子棋

接下来让 AI 在这个场景里实现一个单机五子棋 Demo。

实现方式比较轻量:场景中只保留一个控制对象:

MCP_GomokuGame

挂载脚本:

MCPGomokuGame

脚本路径:

Assets/GameMain/Scripts/MCPGomoku/MCPGomokuGame.cs

这个脚本负责在 Play Mode 自动生成:

  • 15x15 棋盘

  • 棋盘格子

  • 棋盘线

  • 黑白棋子

  • 摄像机

  • 灯光

  • UI 状态文字

  • 重新开始按钮

  • 玩家落子逻辑

  • 简单电脑 AI

  • 五连胜负判定

运行方式很简单:打开 MCP_TestScene.unity,点击 Play。

玩家执黑,鼠标点击棋盘落子,电脑自动下白子。任意一方五子连线后,左上角会显示胜负结果。

自动编译和验证

AI 写完脚本后,并不是直接结束,而是继续通过 MCP 执行 Unity 刷新和编译。

流程大致是:

  1. 写入 C# 脚本

  2. 调用 Unity 刷新脚本

  3. 等待 Domain Reload

  4. 重新连接 MCP Session

  5. 读取 Console 错误

  6. 挂载脚本到场景对象

  7. 保存场景

  8. 进入 Play Mode 验证

  9. 退出 Play Mode

测试中,Unity 脚本刷新会导致 MCP Session 短暂断开,这是正常现象。等 Unity 编译完成后,插件会重新连接。

最终验证结果:

Console error: 0
Play Mode: entered successfully
Runtime objects: generated
Play Mode: exited successfully

也就是说,这个五子棋 Demo 不只是“代码写出来了”,而是实际在 Unity 里跑过一次。

Unity MCP 的实际价值

这次测试下来,Unity MCP 最大的价值不是单纯生成代码,而是让 AI 具备了“操作 Unity Editor 的闭环能力”。

传统 AI 辅助开发通常是:

你问问题 -> AI 写代码 -> 你复制到 Unity -> 你编译 -> 你看报错 -> 再问 AI

使用 Unity MCP 后,流程变成:

AI 写代码 -> AI 刷新 Unity -> AI 检查 Console -> AI 修改场景 -> AI 进入 Play Mode 验证

这中间少了很多人工搬运工作。

尤其适合下面这些场景:

  • 快速搭建 Demo 场景

  • 自动生成测试对象

  • 批量修改场景层级

  • 写 Editor 工具

  • 检查 Console 编译错误

  • 生成小游戏原型

  • 辅助 Unity 新功能验证

使用过程中的注意事项

实际使用时有几个坑需要注意。

第一,端口要确认没被占用。之前尝试使用 8080 时,发现该端口被 Windows System 进程占用,访问 /health 返回 404。换到 8756 后正常。

第二,Unity 进入 Play Mode 或刷新脚本时,MCP 连接可能会短暂断开。这个不一定是错误,通常等待 Unity 重新注册即可。

第三,AI 调用工具后仍然要验证结果。比如本次测试中 primitive_type="Cube" 创建出来的对象不完整,最后通过 Unity 菜单命令修正。

第四,建议让 AI 每次大改后检查 Console。Unity 项目里最怕“看起来创建成功,实际有编译错误”。

总结

Unity MCP 让 AI 从“代码建议者”变成了“Unity 操作员”。

它可以直接和 Unity Editor 交互,完成场景创建、脚本写入、编译检查、运行验证等工作。

这次实测中,AI 成功完成了:

  • MCP Server 启动验证

  • Unity 插件连接验证

  • 新建 Unity 场景

  • 创建并挂载 MonoBehaviour 脚本

  • 实现单机五子棋

  • Play Mode 验证

  • Console 错误检查

对于 Unity 开发来说,这类工具很适合做原型验证和重复性编辑器操作。它还不能完全替代开发者,但已经可以显著减少“写代码、切 Unity、看报错、再改代码”的机械流程。

后续如果结合项目自身的工具链,比如资源规范、UI 框架、打包流程、自动化测试,Unity MCP 的价值会更明显。


扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=698

标签: unityAI
分享给朋友:

“AI 使用 Unity MCP 自动操作 Unity:从连接配置到生成五子棋场景的实战记录” 的相关文章

解读抽象的力量——记图灵奖得主Barbara Liskov演讲

2009年,我在图灵奖获奖仪式上要做一个讲话,在我想这个演讲怎么讲的时候,我就决定把我看过的论文再重新看一看,就是说我达到获得图灵奖的成就的那些最初的想法是什么,今天我非常想与大家分享这个。 我在斯坦福大学拿到了博士学位,当时学的是人工智能,我在读博士读到一半的时候,决定放弃人工智能转而研究计算机系…

Unity + HybridCLR 社区版下 UniTask 泛型 AOT 问题排查记录

最近在接入小七 GameSDK 登录流程时,Android 真机上遇到了 HybridCLR + UniTask 的 AOT 泛型缺失问题。这里记录一下问题现象、排查过程和最终处理方案。问题现象真机日志里出现类似错误:AOT generic method not&nbs…

宽带ADSL中的VPI/VCI是什么?

宽带ADSL中的VPI/VC …

Mac Application GDB Usage

一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。&…

freopen (stdin stdout ) 详解+实例

在flac库中看到if(fin != stdin)这种用法,记下.…

Flash 控件的一些重要属性和方法

属性: 1.AlignMode (读写) 语法:AlignMode As Long 说明:对齐方式(与 SAlign 属性联动)。当控件的 长宽比例与影片不一致且 WMode 不为 ExactFit 时,影片 (没有被放大的)在控件中显示的位置可用该属性调整。 该属性值由标志位组成。如图,将该属性值…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。