Unity-MCP 统一项目智能管理工具
无缝自动化和对Unity项目的智能控制。通过与MCP服务器和客户端集成,它允许AI代理或外部工具与您的Unity环境交互——创建、修改和管理GameObject、组件、资产、场景等。
服务介绍
Unity MCP (Server + 插件)
| Unity 版本 | 编辑模式 | 播放模式 | 独立运行 |
|---|---|---|---|
| 2022.3.61f1 | |||
| 2023.2.20f1 | |||
| 6000.0.46f1 |
Unity-MCP 是LLM与Unity之间的桥梁。它向LLM展示并解释了Unity的工具。LLM理解这些接口,并按照用户的要求使用这些工具。
通过集成的AI Connector窗口,将**Unity-MCP** 连接到像Claude或Cursor这样的LLM客户端。也支持自定义客户端。
该项目旨在让开发者能够很快添加自定义工具。之后的目标是在玩家构建中启用相同的功能。目前仅在Unity编辑器中有效。
系统是可扩展的:您可以在Unity项目的代码库中直接定义自定义的tool,从而向AI或自动化客户端暴露新的功能。这使得Unity-MCP成为构建高级工作流程、快速原型设计或将AI驱动的功能集成到开发过程中的灵活基础。
AI 工具
GameObject
- ✅ 创建
- ✅ 销毁
- ✅ 查找
- 🔲 修改(标签、层级、名称、静态)
- ✅ 设置父对象
- ✅ 复制
GameObject.Components
- ✅ 添加组件
- ✅ 获取组件
- ✅ 修改组件
- ✅
Field设置值 - ✅
Property设置值 - ✅
Reference链接设置
- ✅
- ✅ 销毁组件
- 🔲 移除缺失的组件
编辑器
- ✅ 状态 (播放模式)
- ✅ 获取
- ✅ 设置
- 🔲 获取窗口
- 🔲 层级
- 🔲 获取所有
- 🔲 添加
- 🔲 移除
- 🔲 标签
- 🔲 获取所有
- 🔲 添加
- 🔲 移除
- 🔲 执行
MenuItem - 🔲 运行测试
Editor.Selection
- ✅ 获取选中项
- ✅ 设置选中项
预制件
- ✅ 实例化
- ✅ 创建
- 🔲 打开
- 🔲 保存
- 🔲 关闭
资源
- ✅ 搜索
- ✅ 刷新
- 🔲 导入 (是否需要?)
- 🔲 读取
- 🔲 修改
- ✅ 重命名
- ✅ 删除
- ✅ 移动
- ✅ 创建文件夹
场景
- ✅ 创建
- ✅ 保存
- ✅ 加载
- ✅ 卸载
- ✅ 获取已加载
- ✅ 获取层次结构
- 🔲 搜索 (编辑器)
- 🔲 射线检测 (理解体积)
材质
- 🔲 创建
- 🔲 更新
- ✅ 分配给游戏对象上的组件
脚本
- ✅ 读取
- ✅ 更新或创建
- ✅ 删除
可脚本化对象
- 🔲 创建
- 🔲 读取
- 🔲 修改
- 🔲 移除
调试
- 🔲 读取日志 (控制台)
组件
- ✅ 获取全部
包
- 🔲 获取已安装
- 🔲 安装
- 🔲 移除
- 🔲 更新
图例:
✅ = 已实现并可用, 🔲 = 计划/尚未实现
安装
- 在 Unity 项目文件夹中打开命令行
- 运行以下命令
openupm add com.ivanmurzak.unity.mcp
使用方法
- 前往 👉
Window/AI Connector (Unity-MCP). - 单击您的 MCP 客户端上的配置。
- 重启您的 MCP 客户端。
- 确保在重启后
AI Connector是 "已连接" 状态。 - 在客户端 (Cursor, Claude Desktop) 中测试 AI 连接。在聊天框中输入任何问题或任务,例如:
Explain my scene hierarchy
添加自定义 tool
⚠️ 尚未支持。
csharp-sdk中存在一个针对 MCP 服务器的阻塞问题。正在等待解决方案。
请为 此问题 和 这个问题 投票以引起更多关注。自定义工具依赖于此。
Unity-MCP 设计用于支持项目所有者开发自定义 tool。MCP 服务器从 Unity 插件获取数据并将其暴露给客户端。因此,在 MCP 通信链中的任何人都会收到有关新 tool 的信息。LLM 可能在某个时刻决定调用它。
要添加自定义 tool,您需要:
- 有一个带有
McpPluginToolType属性的类。 - 在该类中有一个带有
McpPluginTool属性的方法。 - [可选] 为每个方法参数添加
Description属性,以便 LLM 可以理解它。 - [可选] 使用
string? optional = null属性,并使用?和默认值来标记它们对 LLM 是可选的。
请注意这行代码
=> MainThread.Run(() =>,它允许在主线程中运行代码,这是与 Unity API 交互所必需的。如果你不需要这样做,并且工具在后台线程中运行没有问题,那么为了效率起见,不要使用主线程。
[McpPluginToolType]
public class Tool_GameObject
{
[McpPluginTool
(
"GameObject_Create",
Title = "Create a new GameObject",
Description = "Create a new GameObject."
)]
public string Create
(
[Description("Path to the GameObject (excluding the name of the GameObject).")]
string path,
[Description("Name of the GameObject.")]
string name
)
=> MainThread.Run(() =>
{
var targetParent = string.IsNullOrEmpty(path) ? null : GameObject.Find(path);
if (targetParent == null && !string.IsNullOrEmpty(path))
return $"[Error] Parent GameObject '{path}' not found.";
var go = new GameObject(name);
go.transform.position = new Vector3(0, 0, 0);
go.transform.rotation = Quaternion.identity;
go.transform.localScale = new Vector3(1, 1, 1);
if (targetParent != null)
go.transform.SetParent(targetParent.transform, false);
EditorUtility.SetDirty(go);
EditorApplication.RepaintHierarchyWindow();
return $"[Success] Created GameObject '{name}' at path '{path}'.";
});
}
添加自定义游戏内 tool
⚠️ 尚未支持。
csharp-sdk对于 MCP 服务器存在一个阻碍性问题。正在等待解决方案。
请为 这个问题 和 这个问题 投票以引起更多关注。自定义工具依赖于此问题的解决。
贡献
随时可以向项目中添加新的 tool。
- 分叉项目。
- 在你的分叉仓库中实现新的
tool。 - 向原始 Unity-MCP 仓库创建 Pull Request。