Unity MCP 包是一个能够实现 Unity 与大型语言模型(如 Claude Desktop)通过模型上下文协议(Model Context Protocol,MCP)进行无缝通信的 Unity 包。该服务器充当桥梁,允许 Unity 向符合 MCP 的工具发送命令并接收响应,使开发者能够自动化工作流程、操作资产并以编程方式控制 Unity 编辑器。
欢迎使用这个开源项目的首次发布版本!无论您是想将大型语言模型整合到 Unity 工作流程中,还是想为这个令人兴奋的新工具做出贡献,我都感谢您抽出时间来了解它!
Unity MCP 服务器提供了 Unity(通过 C#)和 Python 服务器之间的双向通信通道,实现:
- 资产管理:以编程方式创建、导入和操作 Unity 资产。
- 场景控制:管理场景、对象及其属性。
- 材质编辑:修改材质及其属性。
- 脚本集成:查看、创建和更新 Unity 脚本。
- 编辑器自动化:控制 Unity 编辑器功能,如撤销、重做、播放和构建。
这个项目非常适合希望利用大型语言模型来增强 Unity 项目或自动化重复任务的开发者。
要使用 Unity MCP 包,请确保您已安装以下内容:
- Unity 2020.3 LTS 或更新版本(
⚠️ 目前仅适用于 URP 项目,推荐直接使用unity6000比较稳定) - Python 3.12 或更新版本
- uv 包管理器
从 python.org 下载并安装 Python 3.12 或更新版本。确保在安装过程中将 Python 添加到系统的 PATH 中。
uv 是一个简化依赖管理的 Python 包管理器。根据您的操作系统使用以下命令安装:
Mac:
brew install uv
Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
然后,将 uv 添加到您的 PATH:
set Path=%USERPROFILE%\.local\bin;%Path%
Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
有关其他安装方法,请参阅 uv 安装指南。
重要提示:请务必安装 uv 后再继续。
- 打开 Unity 并转到 Window > Package Manager。
- 点击 + 按钮并选择 Add package from git URL。
- 输入:https://github.com/VR-Jobs/UnityMCPbeta.git
安装后,Unity MCP 包将在您的 Unity 项目中可用。当与 Claude Desktop 或 Cursor 等 MCP 客户端一起使用时,服务器将自动启动。
- 双向通信:在 Unity 和大型语言模型之间无缝发送和接收数据。
- 资产管理:以编程方式导入资产、实例化预制件和创建新预制件。
- 场景控制:打开、保存和修改场景,以及创建和操作游戏对象。
- 材质编辑:轻松应用和修改材质。
- 脚本集成:在 Unity 中创建、查看和更新 C# 脚本。
- 编辑器自动化:自动化 Unity 编辑器任务,如构建项目或进入播放模式。
遇到问题?尝试以下解决方法:
确保 Unity 编辑器已打开且 MCP 窗口处于活动状态。如有需要,重启 Unity。
验证 Python 和 uv 已正确安装,并且 Unity MCP 包已正确设置。
确保您的 MCP 客户端已配置为与 Unity MCP 服务器通信。
如需更多帮助,请访问问题跟踪器或提交新问题。
1️⃣unity的urp渲染出问题:建议采用unity6000比较稳定。因为2021有些版本不支持urp的17.0
2️⃣unity6000创建项目,名称不能有空格,比如myproject(1)就不行。建议unityMCP这样的格式
3️⃣uv包安装失败,尝试采用
curl -LsSf https://astral.sh/uv/install.sh | sudo sh
然后添加到 PATH
source $HOME/.local/bin/env
然后检查安装验证 uv 是否可用:
uv --version
正确情况应该显示类似这样的效果: uv 0.6.9 (3d9460278 2025-03-20)
4️⃣Claude连接失败?尝试采用衔接方案:
- 创建一个包装脚本
首先,创建一个 shell 脚本来运行 uv 命令:
mkdir -p ~/unity_mcp_scripts
nano ~/unity_mcp_scripts/run_uv.sh
- 在脚本中添加以下内容:此处应该是一个可以编辑的界面,有很多快捷键,类似text记事本。然后粘贴下面的内容。然后保存,确认,回到主界面
#!/bin/bash
export PATH="/Users/XXXXXX/.local/bin:$PATH"
cd "/Users/XXXXXX/unityMCP/Library/PackageCache/com.vrjobs.unitymcp/Python"
/Users/XXXXXX/.local/bin/uv run server.py
- 然后粘贴下面内容,使得脚本可执行:
chmod +x ~/unity_mcp_scripts/run_uv.sh
- 修改 Claude Desktop 配置文件,或者手动去unity的window-unityMCP,点击Manual手动设置claude文件,注意XXXXXX换成你的用户路径
或者直接输入
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
将内容替换为:
{
"mcpServers": {
"unityMCP": {
"command": "/bin/bash",
"args": [
"/Users/XXXXXX/unity_mcp_scripts/run_uv.sh"
]
}
}
}
-
重启Claude,正确可以用的情况应该是有一个🔌插头按钮,还有右侧锤子🔨显示工具情况:
🌞演示案例:
1️⃣草图生成消消乐小游戏:
提示词:
i want to make a block click game, at the beginning, there are 4 multiple 4 totally 16 blocks, i can use left button click to click any blocks. if i click the green blocks like this picture, the continuous four green blocks will disappear together. and then the system will add an extra four green blocks to fill in the void area. again, if i click the orange blocks, all continuous orange blocks will disappear, and the system will add same number of blocks to fill in. please refer my draft picture, use cube, and use red, orange, yellow, green, blue to make a game.
最终效果
2️⃣网络图片一张图复刻积木弹球游戏
提示词:
in my scene, please refer to this picture, help me use sphere and cube to make a game: Block ball game. I can use the mouse to move the left and right positions of the platform cube below. The gameplay is: at the beginning of the game, there is a small ball on the platform below. When I click the left mouse button, the ball is launched into the air. When the ball hits the colored blocks in the air, those blocks will disappear. Every time a block is hit, one point is scored. The ball returns. I need to shake the mouse to catch the ball with the rectangular cube below 8000 and let it catapult into the air again. If I don't catch the ball, the game fails, and a text mesh pro is displayed. When all the blocks in the air disappear, the game is won.
最终效果
3️⃣图片复刻3D场景
提示词:
please refer to this picture and use sphere, cube, and cylinder objects to build a similar scene. you should also make sure the color of each object is same
最终效果
🌟小练习:自己制作一个UI功能MCP:
提示:
1.新建UI功能实现的cs脚本UICommandHandler.cs。在Editor/Commands
2.新建python功能和UI对接的py脚本ui_tools.py
3.更新unity端CommandRegistry.cs和UnityMCPBridge.cs控制代码注册列表
4.更新python端i__init__.py注册列表。在Python/tools文件夹
5.更新server.py服务端协调代码的prompt
🙋目前不足的地方:
1️⃣UI界面的复刻需要用代码实现,不是很方便。效果也不太好
2️⃣制作积木弹球游戏,他是分别每一个积木单独创建、设置颜色、位置,很麻烦,
3️⃣对于稍微复杂一点的游戏机制,比如动画Animator和Animation设置,物理材质设置还不太智能
4️⃣未来测试方向:文本生成游戏,图片生成游戏,商品生成游戏,草图生成游戏。场景所有物体信息理解和处理,所有代码文件夹综合分析。
非常感谢所有支持这个项目初始发布的人。特别感谢 Unity Technologies 提供的出色编辑器 API。
祝您编码愉快,享受将大型语言模型与 Unity 集成的过程!
-
apply_prefab: 将预制体实例的更改应用回原始预制体资产。
-
attach_script: 将脚本组件附加到GameObject上。
-
build: 为指定平台构建Unity项目。
-
change_scene: 切换到不同的场景,可选择是否保存当前场景。
-
create_object: 在Unity场景中创建游戏对象(如立方体、球体等)。
-
create_prefab: 从场景中的GameObject创建新的预制体资产。
-
create_script: 创建新的Unity脚本文件。
-
delete_object: 从场景中删除游戏对象。
-
execute_command: 在Unity编辑器中执行特定的编辑器命令或自定义脚本。
-
execute_context_menu_item: 在给定游戏对象的组件上执行特定的[ContextMenu]方法。
-
find_objects_by_name: 通过名称在场景中查找游戏对象。
-
find_objects_by_tag: 通过标签在场景中查找游戏对象。
-
get_asset_list: 获取项目中的资产列表。
-
get_available_commands: 获取可在Unity编辑器中执行的所有可用命令列表。
-
get_component_properties: 获取游戏对象上特定组件的属性。
-
get_hierarchy: 获取场景中游戏对象的当前层次结构。
-
get_object_info: 获取特定游戏对象的信息。
-
get_object_properties: 获取指定游戏对象的所有属性。
-
get_scene_info: 检索当前Unity场景的详细信息。
-
get_selected_object: 获取Unity编辑器中当前选择的游戏对象。
-
import_asset: 将资产(如3D模型、纹理)导入Unity项目。
-
instantiate_prefab: 在指定位置将预制体实例化到当前场景中。
-
list_scripts: 列出指定文件夹中的所有脚本文件。
-
modify_object: 修改游戏对象的属性和组件。
-
new_scene: 在Unity编辑器中创建新的空场景。
-
open_scene: 在Unity编辑器中打开指定的场景。
-
pause: 在播放模式下暂停游戏。
-
play: 在Unity编辑器中以播放模式启动游戏。
-
read_console: 从Unity控制台读取日志消息。
-
redo: 重做Unity编辑器中最后撤销的操作。
-
save_scene: 将当前场景保存到其文件中。
-
select_object: 在Unity编辑器中选择一个游戏对象。
-
set_material: 为游戏对象应用或创建材质。
-
stop: 停止游戏并退出播放模式。
-
undo: 撤销在Unity编辑器中执行的最后一个操作。
-
update_script: 更新现有Unity脚本的内容。
-
view_script: 查看Unity脚本文件的内容。