Unity MCP
连接Unity Editor和Claude Code的模型上下文协议(MCP)包。
建筑
Claude Code ←(STDIO)→ Node.js MCP Server ←(WebSocket :8090)→ Unity Editor (C#)
项目结构
unity-mcp/
├── server/ # Node.js MCP 브릿지 서버 (TypeScript)
│ ├── bin/cli.ts # CLI 엔트리포인트
│ ├── src/
│ │ ├── index.ts # MCP 서버 엔트리포인트
│ │ ├── unity-bridge.ts # WebSocket 클라이언트 (Unity 연결)
│ │ ├── types.ts # 요청/응답 타입 정의
│ │ └── tools/index.ts # 91개 도구 정의
│ └── build/ # 컴파일된 JS 출력
└── unity-package/ # Unity 패키지 (C#)
└── Editor/
├── McpServer.cs # WebSocket 서버 (연결/디스패치)
├── McpServerMenu.cs # 에디터 메뉴 통합
├── McpSettings.cs # 설정 관리
├── ConsoleLogBuffer.cs # 콘솔 로그 버퍼
├── ShaderGraphHelper.cs # ShaderGraph 유틸리티
├── IToolHandler.cs # 도구 핸들러 인터페이스
└── Handlers/ # 90개 핸들러 구현
安装
1.Unity套餐
Packages/manifest.json添加到:
"com.jaewon.mcp-unity": "https://github.com/jaewonjung6446/unity-mcp.git?path=unity-package"
- 需要Unity 2022.3或更高版本
- 依赖性:
com.unity.nuget.newtonsoft-json, com.unity.editorcoroutines
2.构建MCP Server
cd server
npm install
npm run build
3.MCP配置
.mcp.json:
{
"mcpServers": {
"unity": {
"command": "node",
"args": ["D:\\Unity\\Izakoza\\unity-mcp\\server\\build\\cli.js"]
}
}
}
Multiple Unity Projects(多项目设置)
要在一个本地同时运行多个Unity项目的MCP,必须使用不同的端口。
1.设置Unity特定项目的端口
每个Unity项目的 ProjectSettings/McpUnitySettings.json:
项目A:
项目B:
2.MCP服务器设置
.mcp.json在 --port 或者 -p 将端口指定为参数:
{
"mcpServers": {
"unity-project-a": {
"command": "node",
"args": ["D:\\Unity\\unity-mcp\\server\\build\\cli.js", "--port", "8090"]
},
"unity-project-b": {
"command": "node",
"args": ["D:\\Unity\\unity-mcp\\server\\build\\cli.js", "--port", "8091"]
}
}
}
端口优先级
- 命令行参数(
--port)-最优先
ProjectSettings/McpUnitySettings.json 配置文件
- 默认值:
8090
可用工具(91)
编辑器控件(7)
| 工具 |
说明 |
get_state |
编辑器状态(播放模式、活动场景、平台) |
get_selection |
当前选定的对象 |
set_selection |
更改/禁用编辑器选择(多选,选择资源) |
pause_editor |
暂停/关闭Play模式 |
step_frame |
暂停时前进1帧 |
undo_redo |
撤消/重做(步骤20) |
clear_console |
清除控制台窗口和日志缓冲区 |
场景(6)
| 工具 |
说明 |
open_scene |
精简打开(additive选项) |
close_scene |
关闭场景 |
save_scene |
保存活动的精简文件 |
get_scenes_list |
构建设置/加载/完整场景列表 |
get_scene_hierarchy |
精简分层快照 |
set_scene_view_camera |
控制Scene View相机(位置、旋转、缩放、预设视图) |
游戏对象(9)
| 工具 |
说明 |
get_game_object |
GameObject信息(ID/名称/路径) |
create_game_object 创建GameObject(empty,primitive,位置/旋转/缩放) |
|
delete_game_object |
删除GameObject(Undo支持) |
set_game_object_property |
设置属性(名称、标签、图层、位置、旋转、缩放等) |
duplicate_game_object |
复制(数量,偏移选项) |
group_game_objects |
将多个对象分组为空父项 |
align_game_object 按轴对齐(min/max/center/first) |
|
set_parent |
更改/关闭父子关系 |
focus_game_object |
在Scene View中聚焦对象 |
组件(5)
| 工具 |
说明 |
get_component_data |
读取元件序列化字段值 |
add_component |
添加组件(Rigidbody、AudioSource等) |
remove_component |
移除元件 |
set_component_property |
设置元件属性(int、float、Color、Vector等) |
find_objects_by_criteria |
按标签/图层/组件/名称搜索对象 |
预制件(3)
| 工具 |
说明 |
open_prefab |
打开PreFab编辑模式 |
create_prefab |
使用瘦对象创建预Fab资源 |
instantiate_prefab |
将FreeFab实例化到场景中 |
资产管理(13)
| 工具 |
说明 |
create_script 创建C#脚本 |
|
execute_code 执行C#代码 |
|
get_asset_contents |
阅读资源内容 |
get_asset_importer |
查看导入设置 |
copy_asset |
复制资源 |
import_asset |
导入资源 |
delete_asset |
删除资源/文件夹 |
move_asset |
移动/重命名资源 |
create_folder |
创建文件夹(递归) |
get_asset_dependencies |
查询资源依赖性 |
find_references |
反向搜索资源引用 |
get_asset_preview |
资源预览缩略图图像 |
refresh_assets |
刷新AssetDatabase(Ctrl+R) |
搜索与验证(4)
| 工具 |
说明 |
search |
搜索资源或精简对象 |
screenshot |
Scene/Game视图截图 |
test_active_scene |
活动的精简验证(缺少脚本、材料等) |
get_missing_references |
扫描场景/资源中的缺失参照 |
着色器图(5)
| 工具 |
说明 |
create_shader_graph |
创建ShaderGraph(URP Lit/Unlit/Canvas模板) |
add_shader_graph_node 添加节点(SampleTexture2D、Color、Multiply等) |
|
connect_shader_graph_nodes |
节点之间的连接 |
add_shader_graph_property |
添加属性(Color、Float、Texture 2D等) |
get_shader_graph_node_types |
查看支持节点类型/插槽信息 |
材质与渲染(7)
| 工具 |
说明 |
create_material |
创建材质(指定着色器) |
set_material_property |
材料属性设置(color、float、texture等) |
set_game_object_material |
将材料分配给GameObject |
analyze_scene 场景分析(渲染器、材质、着色器、光源) |
|
get_render_settings |
查看渲染设置(ambient、fog、skybox、reflections) |
set_render_settings |
更改渲染设置(fog、ambient、skybox等) |
set_light_property |
设置光源属性(类型、颜色、强度、阴影等) |
卷/后处理(2)
| 工具 |
说明 |
get_volume_settings |
浏览URP Volume设置(Bloom、Vignette等) |
set_volume_component |
设置体积元件(Bloom、ColorAdjustments等) |
用户界面(9)
| 工具 |
说明 |
create_ui_element |
创建UI元素(自动生成Text、Button、Slider等,Canvas) |
find_ui_elements |
扫描Canvas UI元素(路径、类型、状态) |
inspect_ui_layout 检测UI布局问题(重叠、屏幕外、小触摸区域) |
|
click_ui_element UI点击模拟(Play Mode) |
|
set_ui_input |
输入InputField文本(Play Mode) |
get_ui_state 查询UI元素状态(Button、Toggle、Slider等) |
|
drag_ui_element UI拖放模拟(Play Mode) |
|
scroll_ui 滚动事件模拟(Play Mode) |
|
set_ui_value |
滑块/切换/下拉/滚动条값 설정 |
QA&播放模式(6)
| 工具 |
说明 |
set_play_mode |
进入/退出Play模式 |
get_console_logs 查询控制台日志(error、warning、exception筛选器) |
|
wait_for_seconds |
等待(0.1至30秒) |
wait_until |
等待满足条件(对象激活、文本匹配等) |
simulate_input 模拟键盘/鼠标输入(Play Mode) |
|
set_time_scale 设置Time.timeScale(慢速、倍速) |
|
动画(2)
| 工具 |
说明 |
get_animator_state |
查看Animator状态、过渡信息和参数值 |
set_animator_parameter |
设置Animator参数(Float、Int、Bool、Trigger) |
物理(三)
| 工具 |
说明 |
raycast |
物理播放(世界/屏幕坐标,多重点击) |
set_rigidbody_property |
设置Rigidbody/2D属性(质量、拖动、重力等) |
apply_force |
对Rigidbody施加力(Force,Impulse,VelocityChange) |
音频(2)
| 工具 |
说明 |
get_audio_sources |
查看场景中的所有AudioSource信息 |
play_audio |
音频播放/停止/暂停(可更改剪辑) |
导航(2)
| 工具 |
说明 |
get_navmesh_info |
NavMesh信息,NavMeshAgent/Obstacle查询 |
set_navmesh_destination |
设置/停止NavMeshAgent目的地(Play Mode) |
场景系统(2)
| 工具 |
说明 |
get_particle_system_info |
ParticleSystem信息(模块设置、状态、派对大小) |
get_terrain_info |
Terrain信息(大小、分辨率、图层、树) |
项目信息(4)
| 工具 |
说明 |
get_project_settings |
查看项目设置(player、quality、physics、time) |
get_packages |
安装的软件包列表 |
get_build_settings |
构建设置(目标平台、场景、开发模式) |
get_performance_stats |
运行时性能统计(FPS、内存、对象数量) |
发展
cd server
npm install
npm run build # TypeScript 컴파일
npm run watch # 변경 감지 자동 빌드
node build/cli.js # 서버 실행