Unity编辑器AI控制服务

该服务通过Model Context Protocol (MCP)服务器实现AI助手直接控制Unity编辑器,支持场景操作、脚本编写和播放模式控制等功能,适用于游戏开发中的AI辅助工作。

  • by mitchchristow
  • C#
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 mitchchristow/unity-mcp

使用说明

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(推荐)

  1. 打开Unity项目
  2. 首选 窗口>包管理器
  3. 点击 + → 从git URL添加包。。。
  4. 输入:
    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。

  1. 打开Unity并等待 [MCP] HTTP Server started 在控制台中
  2. 在Cursor中打开项目文件夹
  3. MCP服务器通过以下方式自动启动 .cursor/mcp.json
  4. 开始聊天!尝试: 在(0,1,0)位置创建一个红色立方体

手动设置 (如果自动检测失败):

创建 .cursor/mcp.json:

{
  "mcpServers": {
    "unity": {
      "command": "node",
      "args": ["./gateway/index.js"],
      "cwd": "${workspaceFolder}"
    }
  }
}

反重力(⚠️ 仅全局配置)

备注:根据 反重力MCP文件,反重力 仅支持全局MCP配置。每个项目的配置不可用。

设置:

  1. 开放反重力→ Click "..." → “管理MCP服务器” → “查看原始配置”
  2. 添加此配置(更新安装路径):
{
  "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服务器添加到其他工作区:

  1. 创建一个 .vscode/mcp.json 项目根目录中的文件。
  2. 添加配置:
    {
      "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服务器、修复错误或添加新功能吗?这部分是给你的。

开发设置

  1. 克隆存储库:

    git clone https://github.com/mitchchristow/unity-mcp.git
    cd unity-mcp
    
  2. 在Unity中打开:打开repo根(或 版本工作台)在Unity Hub。

  3. 安装网关依赖项:

    cd gateway
    npm install
    
  4. 项目结构:

    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).

添加新功能

添加新工具

  1. 创建/更新控制器 在 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 };
        }
    }
    
  2. 注册于 McpServer.cs:

    MyController.Register();
    
  3. 在中添加工具定义 gateway/index.js:

    {
      name: "unity_my_tool",
      description: "What this tool does",
      inputSchema: {
        type: "object",
        properties: { /* ... */ },
        required: ["param1"],
      },
    },
    
  4. 添加处理程序 在 CallToolRequestSchema 如果需要,请使用处理器。

添加新资源

  1. 在Unity中添加RPC方法(类似于工具)
  2. 将资源定义添加到 RESOURCES 数组in gateway/index.js
  3. 将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版本上的材料):

  1. unity.create_primitive — Sphere,名称例如。 SmokeSphere
  2. unity.set_transform --职位 (0,0,0),规模 (5,5,5)
  3. unity.create_material --例如。 SmokeMaterial (标准着色器)
  4. unity.set_material_property --set _Color (例如红色或黄色)
  5. unity.set_material --将材质应用于球体
  6. 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调用路由到控制器

拉取请求指南

  1. 创建要素分支: feature/my-feature
  2. 遵循现有代码样式
  3. 如果添加面向用户的功能,请更新文档
  4. 使用Cursor进行测试,以验证MCP集成
  5. 更新 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社区