使用说明
Unity MCP服务器
直接从AI助手控制Unity编辑器。
该项目实现了 模型上下文协议(MCP) 在Unity编辑器内运行的服务器。它允许AI驱动的IDE,如 光标 通过自然语言操纵场景、编写脚本和控制游戏模式,在游戏开发中直接使用GenAI。
📖 目录
🚀 用户:快速入门
想使用这个MCP服务器用AI构建Unity游戏吗?请按照以下步骤操作:
先决条件
- Unity 6.2、6.3 LTS或6.5 (参见 支持的版本 在......下面
- Node.js 18+
- 反重力, 光标IDE, VS代码与克劳德代码,或另一个兼容MCP的IDE
步骤1:安装Unity软件包
选项A:来自GitHub(推荐)
- 打开Unity项目
- 首选 窗口>包管理器
- 点击 + → 从git URL添加包。。。
- 输入:
https://github.com/mitchchristow/unity-mcp.git?path=/Packages/org.christowm.unity.mcp
选项B:克隆用于本地开发
git clone https://github.com/mitchchristow/unity-mcp.git
cd unity-mcp
然后在Unity Hub中打开文件夹。
步骤2:安装网关依赖项
cd gateway
npm install
步骤3:连接IDE
光标(✅ 完全支持)
Cursor是推荐的具有完全MCP支持的IDE。
- 打开Unity并等待
[MCP] HTTP Server started在控制台中 - 在Cursor中打开项目文件夹
- MCP服务器通过以下方式自动启动
.cursor/mcp.json - 开始聊天!尝试: 在(0,1,0)位置创建一个红色立方体
手动设置 (如果自动检测失败):
创建 .cursor/mcp.json:
{
"mcpServers": {
"unity": {
"command": "node",
"args": ["./gateway/index.js"],
"cwd": "${workspaceFolder}"
}
}
}
反重力(⚠️ 仅全局配置)
备注:根据 反重力MCP文件,反重力 仅支持全局MCP配置。每个项目的配置不可用。
设置:
- 开放反重力→ Click "..." → “管理MCP服务器” → “查看原始配置”
- 添加此配置(更新安装路径):
{
"mcpServers": {
"unity": {
"command": "node",
"args": ["/absolute/path/to/unity-mcp/gateway/index.js"],
"cwd": "/absolute/path/to/unity-mcp"
}
}
}
看 反重力集成指南 详细说明。
VS代码(✅ 通过Kilo、Copilot和Claude Code支持)
VS Code通过以下方式支持MCP服务器 千, GitHub Copilot,以及 克劳德代码 扩展(和其他)。
自动设置:
此存储库包括 .vscode/mcp.json 文件。如果您在安装了GitHub Copilot或Kilo扩展的VS Code中打开此文件夹,则应自动检测到Unity MCP服务器。
手动设置(Kilo/GitHub Copilot): 如果要将Unity MCP服务器添加到其他工作区:
- 创建一个
.vscode/mcp.json项目根目录中的文件。 - 添加配置:
{ "servers": { "unity": { "command": "node", "args": ["/path/to/unity-mcp/gateway/index.js"], "type": "stdio" } } }
Claude代码设置:
此存储库包括 .mcp.json Claude代码支持文件。如果你有 克劳德代码 如果扩展安装在VS Code中,则打开此项目时将自动检测到Unity MCP服务器。
对于在其他工作区中的手动设置,请创建 .mcp.json 项目根目录中的文件:
{
"mcpServers": {
"unity": {
"command": "node",
"args": ["./gateway/index.js"],
"cwd": "${workspaceFolder}"
}
}
}
看 VS代码集成指南 了解更多详情。
第四步:开始建设!
连接后,您可以使用自然语言控制Unity:
- “使用WASD动作创建2D玩家角色”
- “将Rigidbody2D添加到所选对象”
- “建立回合制战斗系统”
- “我的场景中有什么物体?”
🛠 开发者:贡献
想要扩展MCP服务器、修复错误或添加新功能吗?这部分是给你的。
开发设置
-
克隆存储库:
git clone https://github.com/mitchchristow/unity-mcp.git cd unity-mcp -
在Unity中打开:打开repo根(或 版本工作台)在Unity Hub。
-
安装网关依赖项:
cd gateway npm install -
项目结构:
unity-mcp/ ├── Packages/org.christowm.unity.mcp/ # Unity Editor package │ └── Editor/ │ ├── MCP/ # MCP server implementation │ │ ├── Rpc/Controllers/ # RPC method handlers │ │ ├── McpObjectReference.cs # Unity 6.2–6.5 object ID bridge │ │ ├── Events/ # WebSocket event system │ │ └── Progress/ # Progress tracking │ ├── Networking/ # HTTP & WebSocket servers │ └── IPC/ # Named Pipe server ├── gateway/ # Node.js MCP gateway │ └── index.js # Tool/Resource/Prompt definitions ├── Docs/ # Documentation (Docusaurus) ├── .cursor/ # Cursor IDE MCP config ├── ide-integrations/ # IDE config templates │ ├── antigravity/ # Global config template │ └── vscode/ # VS Code extension (WIP) └── TODO.md # Future improvements roadmap
支持的Unity版本和工作树
该项目在三个Unity 6编辑器行上进行了测试。 为每个版本使用单独的项目文件夹 所以 ProjectSettings/ 和 Library/ 在切换编辑器时不会被覆盖。
| Unity | Hub版本(示例) | 本地工作树文件夹 | Git分支 |
|---|---|---|---|
| 6.2 | 6000.2.x |
worktrees/unity-620 |
worktree/unity-620 |
| 6.3升 | 6000.3.x |
worktrees/unity-630-lts |
worktree/unity-630-lts |
| 6.5 | 6000.5.x |
worktrees/unity-6500 |
worktree/unity-6500 |
回购根(unity-mcp/)继续 main 用于git工作和一般开发。版本工作树是 仅限本地 (/worktrees/ 在...里 .gitignore).
创建工作树 (从repo根目录开始,克隆后):
git worktree add -B worktree/unity-620 worktrees/unity-620 main
git worktree add -B worktree/unity-630-lts worktrees/unity-630-lts main
git worktree add -B worktree/unity-6500 worktrees/unity-6500 main
使用匹配的编辑器打开Unity Hub中的每个文件夹。预计Unity将升级该副本 ProjectVersion.txt 在首次启动时,这是正常的,并且保持在该工作台的本地。
对象ID: Unity 6.5返回大 ulong 导线上的实体ID;6.2/6.3使用 int 实例ID。包裹代码路由通过 McpObjectReference (#if UNITY_6000_5_OR_NEWER).
添加新功能
添加新工具
-
创建/更新控制器 在
Packages/.../Rpc/Controllers/:public static class MyController { public static void Register() { JsonRpcDispatcher.RegisterMethod("unity.my_method", MyMethod); } private static JObject MyMethod(JObject p) { // Implementation return new JObject { ["ok"] = true }; } } -
注册于
McpServer.cs:MyController.Register(); -
在中添加工具定义
gateway/index.js:{ name: "unity_my_tool", description: "What this tool does", inputSchema: { type: "object", properties: { /* ... */ }, required: ["param1"], }, }, -
添加处理程序 在
CallToolRequestSchema如果需要,请使用处理器。
添加新资源
- 在Unity中添加RPC方法(类似于工具)
- 将资源定义添加到
RESOURCES数组ingateway/index.js - 将URI添加到中的方法映射
ReadResourceRequestSchema处理器
添加新提示
添加到 PROMPTS 数组和实现 generatePromptContent() 函数 gateway/index.js.
测试
快速RPC检查 (Unity打开,MCP服务器正在运行):
curl -X POST http://localhost:17890/mcp/rpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"unity.get_project_info","params":{},"id":1}'
烟雾测试 (验证图元→ 转变→ 任何支持的Unity版本上的材料):
unity.create_primitive—Sphere,名称例如。SmokeSphereunity.set_transform--职位(0,0,0),规模(5,5,5)unity.create_material--例如。SmokeMaterial(标准着色器)unity.set_material_property--set_Color(例如红色或黄色)unity.set_material--将材质应用于球体unity.get_object_details--确认转换和材料
批量干运行: 打电话给 unity_batch 工具与 "dryRun": true 验证工具名称和 $N 插值而不修改场景。
操作审核日志: 阅读 unity://operations/history 用于查看网关记录的最近MCP工具调用的资源(工具名称、参数、成功/错误、持续时间)。
EditMode测试: 窗口→ 通用→ 测试运行器→ 编辑模式(包中有4个测试)。
# WebSocket events
wscat -c ws://localhost:17891/mcp/events
需要了解的关键文件
| 文件 | 目的 |
|---|---|
gateway/index.js |
MCP网关-所有工具、资源、提示 |
McpServer.cs |
Unity端服务器初始化 |
HttpServer.cs |
HTTP JSON-RPC处理程序 |
WebSocketServer.cs |
实时事件流 |
JsonRpcDispatcher.cs |
将RPC调用路由到控制器 |
拉取请求指南
- 创建要素分支:
feature/my-feature - 遵循现有代码样式
- 如果添加面向用户的功能,请更新文档
- 使用Cursor进行测试,以验证MCP集成
- 更新
TODO.md如果实施积压项目
看 TODO.md 计划改进的路线图。
✨ 特性
| 类别 | 功能 |
|---|---|
| 场景控制 | 创建、移动、删除、检查游戏对象 |
| 组件 | 添加/删除组件,通过反射修改属性 |
| 资产 | 列出并检查材料、预制件、脚本、纹理 |
| 脚本编写 | 从模板创建脚本,监控编译 |
| 播放模式 | 开始、停止、暂停游戏 |
| 照明 | 创建灯光,配置环境照明 |
| 相机 | 创建相机,控制场景视图 |
| 物理学 | 重力、光线投射、碰撞层(2D和3D) |
| 用户界面 | 创建画布、按钮、文本、图像 |
| 地形 | 创建和雕刻地形 |
| 粒子 | 创建和配置粒子系统 |
| 导航 | NavMesh烘焙、代理、寻路 |
| 音频 | 音频源、播放控制 |
| 构建 | 配置和执行构建 |
| 2D开发 | Sprites、tilemaps、2D物理 |
| 批量操作 | 在一次调用中执行多个工具,包括结果链、单撤消和可选的模拟运行验证 |
| 操作审核日志 | Gateway记录最近的MCP工具调用;通过检查 unity://operations/history |
| 鼓励 | 8个常见任务的工作流模板 |
| 事件 | 实时场景/选择/控制台流媒体 |
📦 可用工具、资源和提示
工具(80)
服务器暴露 80工具 按类别组织。许多人使用 action 参数以合并相关操作。
Core Tools
| 工具 | 说明 |
|---|---|
unity_list_objects |
列出场景中的所有游戏对象 |
unity_create_object |
创建一个新的空游戏对象 |
unity_create_primitive |
创建基本体(立方体、球体等) |
unity_delete_object |
删除游戏对象 |
unity_set_transform |
设置位置、旋转和比例 |
unity_selection |
选择:设置、清除、选择_by_name、聚焦 |
unity_find_objects |
查找方式:名称、标记、组件或图层 |
Consolidated Tools (action-based)
| 工具 | 操作 |
|---|---|
unity_playmode |
播放、停止、暂停 |
unity_undo_action |
撤消、重做、获取历史记录、清除、开始分组、结束分组 |
unity_component |
添加、删除、列出、获取属性 |
unity_file |
读、写、存在、list_dir、create_dir |
unity_capture |
游戏、场景 |
unity_animator |
get_info、get_parameters、set_parameter、play_state |
unity_build |
设置目标、添加场景、删除场景、获取场景、构建 |
unity_package |
get_info、添加、删除、搜索 |
unity_window |
打开、关闭、聚焦、获取信息 |
unity_sprite |
create、set_sprite、set_property、get_info |
unity_tilemap |
创建、设置文件、获取文件、填充、清除所有、获取信息 |
unity_batch |
在一个撤消组中顺序运行多个工具;支持 $0 结果链和 dryRun: true 验证 |
Batch Operations (`unity_batch`)
在一个MCP请求中运行多个工具调用。整个批次被包装在一个Unity撤消组中(一个Ctrl+Z将恢复所有)。
结果链: 使用 $0, $1等等 args 参考之前的结果(例如。 "id": "$0.id").
试运行验证: 集 "dryRun": true 验证工具名称、插值和RPC映射 没有 调用Unity或打开撤消组。有助于在执行复杂的工作流之前对其进行检查。
{
"dryRun": true,
"operations": [
{ "tool": "unity_create_primitive", "args": { "type": "Cube", "name": "TestCube" } },
{ "tool": "unity_set_transform", "args": { "id": "$0.id", "position": { "x": 0, "y": 1, "z": 0 } } }
]
}
Additional Categories
- 照明:create_light、set_light_property、get_lighting_sets、set_ambient_light
- 相机:create_camera、set_camera_property、get_camera_info、scene_view控件
- 物理学:集重力、集物理属性、光线投射、层碰撞
- 用户界面:create_canvas、create_ui_nelement、set_ui_text、set_uo_iimage、set_rect_transform
- 地形:create_terrain、set_terrain_size、terrain_height、flatn_terrain
- 粒子:create_particle_system、set_particle_module、particle_playback
- 导航:navmesh_build、add_navmesh_agent、set_navmesh_destination、calculate_path
- 音频:创建音频源、设置音频源、属性、音频回放
- 二维物理:physics2d_body、physics2d-query、set_physics2d属性
- 脚本编写:create_script,get_component_api
资源(43)
资源提供 只读上下文 AI会自动读取。
All Resources
| 类别 | 资源 |
|---|---|
| 项目 | unity://project/info, unity://assets, unity://packages |
| 场景 | unity://scene/hierarchy, unity://scene/list, unity://scene/stats, unity://scene/analysis |
| 选择 | unity://selection, unity://console/logs |
| 对象 | unity://lights, unity://cameras, unity://terrains, unity://particles, unity://ui/elements |
| 系统 | unity://physics, unity://tags, unity://layers, unity://audio/settings |
| 导航 | unity://navmesh/settings, unity://navmesh/agents |
| 构建 | unity://build/settings, unity://build/targets |
| 事件 | unity://events/recent, unity://events/types, unity://events/status |
| 第2天 | unity://sprites, unity://tilemaps, unity://tiles, unity://2d/physics |
| 脚本编写 | unity://scripts/errors, unity://scripts/warnings, unity://scripts/templates, unity://components/types |
| 进展 | unity://progress |
| 网关 | unity://operations/history --最近的MCP工具调用(工具、参数、RPC方法、成功/错误、持续时间) |
提示(8)
用于复杂任务的预定义工作流模板:
| 提示 | 描述 |
|---|---|
create_2d_character |
带有角色、物理、动作脚本的2D角色 |
setup_turn_based_system |
转向经理、单位、行动系统 |
create_grid_map |
基于网格的地图,带有tilemap和寻路功能 |
create_ui_menu |
UI菜单(主菜单、暂停菜单、设置菜单、库存菜单、战斗菜单) |
setup_unit_stats |
RPG/策略的ScriptableObject统计系统 |
create_audio_manager |
带BGM/SFX池的音频单例 |
optimize_scene |
场景分析和优化建议 |
setup_save_system |
基于JSON的保存/加载系统 |
🏗 建筑
┌─────────────┐ stdio ┌─────────────┐ HTTP ┌─────────────┐
│ IDE/AI │ ◄────────────► │ Gateway │ ◄───────────► │ Unity │
│ (Cursor) │ MCP │ (Node.js) │ JSON-RPC │ Editor │
└─────────────┘ └─────────────┘ └─────────────┘
│
│ WebSocket
▼
Real-time Events
组件
| 组件 | 端口 | 用途 |
|---|---|---|
| HTTP 服务器 | 17890 | JSON-RPC命令处理 |
| WebSocket服务器 | 17891 | 实时事件流 |
| 命名管道 | \\.\pipe\unity-mcp |
安全本地IPC(Windows) |
| Node.js网关 | stdio | MCP协议转换 |
演出
- 通过以下方式连续处理请求队列
EditorApplication.update - Unity处于后台时自动唤醒编辑器
- 典型响应时间: 30-175毫秒
📚 文档
完整文档可在 Docs/ 目录:
另请参见: TODO.md 计划中的改进。
🐛 问题和功能请求
看 TODO.md 规划功能的路线图。
📄 许可证
MIT许可证-请参阅 许可证 了解详情。
由以下材料制成❤️ Unity+AI社区