U

Unity-MCP 统一项目智能管理工具

@IvanMurzak/Unity-MCP
7 Stars 6.3k 次浏览 IvanMurzak 更新于 2026-08-23

无缝自动化和对Unity项目的智能控制。通过与MCP服务器和客户端集成,它允许AI代理或外部工具与您的Unity环境交互——创建、修改和管理GameObject、组件、资产、场景等。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

Unity MCP (Server + 插件)

openupm 许可证 支持乌克兰

image

Unity 版本 编辑模式 播放模式 独立运行
2022.3.61f1 2022.3.61f1 2022.3.61f1 2022.3.61f1
2023.2.20f1 2023.2.20f1 2023.2.20f1 2023.2.20f1
6000.0.46f1 6000.0.46f1 6000.0.46f1 6000.0.46f1

Unity-MCP 是LLM与Unity之间的桥梁。它向LLM展示并解释了Unity的工具。LLM理解这些接口,并按照用户的要求使用这些工具。

通过集成的AI Connector窗口,将**Unity-MCP** 连接到像ClaudeCursor这样的LLM客户端。也支持自定义客户端。

该项目旨在让开发者能够很快添加自定义工具。之后的目标是在玩家构建中启用相同的功能。目前仅在Unity编辑器中有效。

系统是可扩展的:您可以在Unity项目的代码库中直接定义自定义的tool,从而向AI或自动化客户端暴露新的功能。这使得Unity-MCP成为构建高级工作流程、快速原型设计或将AI驱动的功能集成到开发过程中的灵活基础。

AI 工具

GameObject

  • ✅ 创建
  • ✅ 销毁
  • ✅ 查找
  • 🔲 修改(标签、层级、名称、静态)
  • ✅ 设置父对象
  • ✅ 复制
GameObject.Components
  • ✅ 添加组件
  • ✅ 获取组件
  • ✅ 修改组件
    • Field 设置值
    • Property 设置值
    • Reference 链接设置
  • ✅ 销毁组件
  • 🔲 移除缺失的组件

编辑器

  • ✅ 状态 (播放模式)
    • ✅ 获取
    • ✅ 设置
  • 🔲 获取窗口
  • 🔲 层级
    • 🔲 获取所有
    • 🔲 添加
    • 🔲 移除
  • 🔲 标签
    • 🔲 获取所有
    • 🔲 添加
    • 🔲 移除
  • 🔲 执行 MenuItem
  • 🔲 运行测试

Editor.Selection

  • ✅ 获取选中项
  • ✅ 设置选中项

预制件

  • ✅ 实例化
  • ✅ 创建
  • 🔲 打开
  • 🔲 保存
  • 🔲 关闭

资源

  • ✅ 搜索
  • ✅ 刷新
  • 🔲 导入 (是否需要?)
  • 🔲 读取
  • 🔲 修改
  • ✅ 重命名
  • ✅ 删除
  • ✅ 移动
  • ✅ 创建文件夹

场景

  • ✅ 创建
  • ✅ 保存
  • ✅ 加载
  • ✅ 卸载
  • ✅ 获取已加载
  • ✅ 获取层次结构
  • 🔲 搜索 (编辑器)
  • 🔲 射线检测 (理解体积)

材质

  • 🔲 创建
  • 🔲 更新
  • ✅ 分配给游戏对象上的组件

脚本

  • ✅ 读取
  • ✅ 更新或创建
  • ✅ 删除

可脚本化对象

  • 🔲 创建
  • 🔲 读取
  • 🔲 修改
  • 🔲 移除

调试

  • 🔲 读取日志 (控制台)

组件

  • ✅ 获取全部

  • 🔲 获取已安装
  • 🔲 安装
  • 🔲 移除
  • 🔲 更新

图例:
✅ = 已实现并可用, 🔲 = 计划/尚未实现

安装

  1. 安装 .NET 9.0
  2. 安装 OpenUPM-CLI
  • 在 Unity 项目文件夹中打开命令行
  • 运行以下命令
openupm add com.ivanmurzak.unity.mcp

使用方法

  1. 前往 👉 Window/AI Connector (Unity-MCP).
  2. 单击您的 MCP 客户端上的配置。
  3. 重启您的 MCP 客户端。
  4. 确保在重启后 AI Connector 是 "已连接" 状态。
  5. 在客户端 (Cursor, Claude Desktop) 中测试 AI 连接。在聊天框中输入任何问题或任务,例如:
Explain my scene hierarchy

添加自定义 tool

⚠️ 尚未支持。csharp-sdk 中存在一个针对 MCP 服务器的阻塞问题。正在等待解决方案。
请为 此问题这个问题 投票以引起更多关注。自定义工具依赖于此。

Unity-MCP 设计用于支持项目所有者开发自定义 tool。MCP 服务器从 Unity 插件获取数据并将其暴露给客户端。因此,在 MCP 通信链中的任何人都会收到有关新 tool 的信息。LLM 可能在某个时刻决定调用它。

要添加自定义 tool,您需要:

  1. 有一个带有 McpPluginToolType 属性的类。
  2. 在该类中有一个带有 McpPluginTool 属性的方法。
  3. [可选] 为每个方法参数添加 Description 属性,以便 LLM 可以理解它。
  4. [可选] 使用 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

  1. 分叉项目。
  2. 在你的分叉仓库中实现新的 tool
  3. 向原始 Unity-MCP 仓库创建 Pull Request。

相关 MCP 服务