Skip to content

Commit c72549c

Browse files
committed
Merge branch 'main' into improved-prefab-support
2 parents f685e26 + b57a3b8 commit c72549c

File tree

171 files changed

+28597
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+28597
-1
lines changed

README-DEV-zh.md

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
# MCP for Unity 开发工具
2+
3+
| [English](README-DEV.md) | [简体中文](README-DEV-zh.md) |
4+
|---------------------------|------------------------------|
5+
6+
欢迎来到 MCP for Unity 开发环境!此目录包含简化 MCP for Unity 核心开发的工具和实用程序。
7+
8+
## 🚀 可用开发功能
9+
10+
### ✅ 开发部署脚本
11+
用于 MCP for Unity 核心更改的快速部署和测试工具。
12+
13+
### 🔄 即将推出
14+
- **开发模式切换**:内置 Unity 编辑器开发功能
15+
- **热重载系统**:无需重启 Unity 的实时代码更新
16+
- **插件开发工具包**:用于创建自定义 MCP for Unity 扩展的工具
17+
- **自动化测试套件**:用于贡献的综合测试框架
18+
- **调试面板**:高级调试和监控工具
19+
20+
---
21+
22+
## 快速切换 MCP 包源
23+
24+
从 unity-mcp 仓库运行,而不是从游戏的根目录。使用 `mcp_source.py` 在不同的 MCP for Unity 包源之间快速切换:
25+
26+
**用法:**
27+
```bash
28+
python mcp_source.py [--manifest /path/to/manifest.json] [--repo /path/to/unity-mcp] [--choice 1|2|3]
29+
```
30+
31+
**选项:**
32+
- **1** 上游主分支 (CoplayDev/unity-mcp)
33+
- **2** 远程当前分支 (origin + branch)
34+
- **3** 本地工作区 (file: UnityMcpBridge)
35+
36+
切换后,打开包管理器并刷新以重新解析包。
37+
38+
## 开发部署脚本
39+
40+
这些部署脚本帮助您快速测试 MCP for Unity 核心代码的更改。
41+
42+
## 脚本
43+
44+
### `deploy-dev.bat`
45+
将您的开发代码部署到实际安装位置进行测试。
46+
47+
**作用:**
48+
1. 将原始文件备份到带时间戳的文件夹
49+
2. 将 Unity Bridge 代码复制到 Unity 的包缓存
50+
3. 将 Python 服务器代码复制到 MCP 安装文件夹
51+
52+
**用法:**
53+
1. 运行 `deploy-dev.bat`
54+
2. 输入 Unity 包缓存路径(提供示例)
55+
3. 输入服务器路径(或使用默认:`%LOCALAPPDATA%\Programs\UnityMCP\UnityMcpServer\src`
56+
4. 输入备份位置(或使用默认:`%USERPROFILE%\Desktop\unity-mcp-backup`
57+
58+
**注意:** 开发部署跳过 `.venv`, `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.git`;减少变动并避免复制虚拟环境。
59+
60+
### `restore-dev.bat`
61+
从备份恢复原始文件。
62+
63+
**作用:**
64+
1. 列出可用的带时间戳的备份
65+
2. 允许您选择要恢复的备份
66+
3. 恢复 Unity Bridge 和 Python 服务器文件
67+
68+
### `prune_tool_results.py`
69+
将对话 JSON 中的大型 `tool_result` 块压缩为简洁的单行摘要。
70+
71+
**用法:**
72+
```bash
73+
python3 prune_tool_results.py < reports/claude-execution-output.json > reports/claude-execution-output.pruned.json
74+
```
75+
76+
脚本从 `stdin` 读取对话并将修剪版本写入 `stdout`,使日志更容易检查或存档。
77+
78+
这些默认设置在不影响基本信息的情况下大幅减少了令牌使用量。
79+
80+
## 查找 Unity 包缓存路径
81+
82+
Unity 将 Git 包存储在版本或哈希文件夹下。期望类似于:
83+
```
84+
X:\UnityProject\Library\PackageCache\com.coplaydev.unity-mcp@<version-or-hash>
85+
```
86+
示例(哈希):
87+
```
88+
X:\UnityProject\Library\PackageCache\com.coplaydev.unity-mcp@272123cfd97e
89+
90+
```
91+
92+
可靠找到它:
93+
1. 打开 Unity 包管理器
94+
2. 选择"MCP for Unity"包
95+
3. 右键单击包并选择"在资源管理器中显示"
96+
4. 这将打开 Unity 为您的项目使用的确切缓存文件夹
97+
98+
注意:在最新版本中,Python 服务器源代码也打包在包内的 `UnityMcpServer~/src` 下。这对于本地测试或将 MCP 客户端直接指向打包服务器很方便。
99+
100+
## MCP Bridge 压力测试
101+
102+
按需压力测试实用程序通过多个并发客户端测试 MCP bridge,同时通过立即脚本编辑触发真实脚本重载(无需菜单调用)。
103+
104+
### 脚本
105+
- `tools/stress_mcp.py`
106+
107+
### 作用
108+
- 对 Unity MCP bridge 启动 N 个 TCP 客户端(默认端口从 `~/.unity-mcp/unity-mcp-status-*.json` 自动发现)。
109+
- 发送轻量级帧 `ping` 保活以维持并发。
110+
- 并行地,使用 `manage_script.apply_text_edits` 向目标 C# 文件追加唯一标记注释:
111+
- `options.refresh = "immediate"` 立即强制导入/编译(触发域重载),以及
112+
- 从当前文件内容计算的 `precondition_sha256` 以避免漂移。
113+
- 使用 EOF 插入避免头部/`using` 保护编辑。
114+
115+
### 用法(本地)
116+
```bash
117+
# 推荐:使用测试项目中包含的大型脚本
118+
python3 tools/stress_mcp.py \
119+
--duration 60 \
120+
--clients 8 \
121+
--unity-file "TestProjects/UnityMCPTests/Assets/Scripts/LongUnityScriptClaudeTest.cs"
122+
```
123+
124+
标志:
125+
- `--project` Unity 项目路径(默认自动检测到包含的测试项目)
126+
- `--unity-file` 要编辑的 C# 文件(默认为长测试脚本)
127+
- `--clients` 并发客户端数量(默认 10)
128+
- `--duration` 运行秒数(默认 60)
129+
130+
### 预期结果
131+
- 重载过程中 Unity 编辑器不崩溃
132+
- 每次应用编辑后立即重载(无 `Assets/Refresh` 菜单调用)
133+
- 域重载期间可能发生一些暂时断开连接或少数失败调用;工具会重试并继续
134+
- 最后打印 JSON 摘要,例如:
135+
- `{"port": 6400, "stats": {"pings": 28566, "applies": 69, "disconnects": 0, "errors": 0}}`
136+
137+
### 注意事项和故障排除
138+
- 立即 vs 防抖:
139+
- 工具设置 `options.refresh = "immediate"` 使更改立即编译。如果您只需要变动(不需要每次编辑确认),切换到防抖以减少重载中失败。
140+
- 需要前置条件:
141+
- `apply_text_edits` 在较大文件上需要 `precondition_sha256`。工具首先读取文件以计算 SHA。
142+
- 编辑位置:
143+
- 为避免头部保护或复杂范围,工具在每个周期的 EOF 处追加单行标记。
144+
- 读取 API:
145+
- bridge 当前支持 `manage_script.read` 进行文件读取。您可能看到弃用警告;对于此内部工具无害。
146+
- 暂时失败:
147+
- 偶尔的 `apply_errors` 通常表示连接在回复过程中重载。编辑通常仍会应用;循环在下次迭代时继续。
148+
149+
### CI 指导
150+
- 由于 Unity/编辑器要求和运行时变化,将此排除在默认 PR CI 之外。
151+
- 可选择在具有 Unity 功能的运行器上作为手动工作流或夜间作业运行。
152+
153+
## CI 测试工作流(GitHub Actions)
154+
155+
我们提供 CI 作业来对 Unity 测试项目运行自然语言编辑套件。它启动无头 Unity 容器并通过 MCP bridge 连接。要从您的 fork 运行,您需要以下 GitHub "secrets":`ANTHROPIC_API_KEY` 和 Unity 凭据(通常是 `UNITY_EMAIL` + `UNITY_PASSWORD``UNITY_LICENSE` / `UNITY_SERIAL`)。这些在日志中被编辑所以永远不可见。
156+
157+
***运行方法***
158+
- 触发:在仓库的 GitHub "Actions" 中,触发 `workflow dispatch``Claude NL/T Full Suite (Unity live)`)。
159+
- 镜像:`UNITY_IMAGE`(UnityCI)按标签拉取;作业在运行时解析摘要。日志已清理。
160+
- 执行:单次通过,立即按测试片段发射(严格的每个文件单个 `<testcase>`)。如果任何片段是裸 ID,占位符保护会快速失败。暂存(`reports/_staging`)被提升到 `reports/` 以减少部分写入。
161+
- 报告:JUnit 在 `reports/junit-nl-suite.xml`,Markdown 在 `reports/junit-nl-suite.md`
162+
- 发布:JUnit 规范化为 `reports/junit-for-actions.xml` 并发布;工件上传 `reports/` 下的所有文件。
163+
164+
### 测试目标脚本
165+
- 仓库包含一个长的独立 C# 脚本,用于练习较大的编辑和窗口:
166+
- `TestProjects/UnityMCPTests/Assets/Scripts/LongUnityScriptClaudeTest.cs`
167+
在本地和 CI 中使用此文件来验证多编辑批次、锚插入和大型脚本上的窗口读取。
168+
169+
### 调整测试/提示
170+
- 编辑 `.claude/prompts/nl-unity-suite-t.md` 来修改 NL/T 步骤。遵循约定:在 `reports/<TESTID>_results.xml` 下为每个测试发射一个 XML 片段,每个包含恰好一个以测试 ID 开头的 `name``<testcase>`。无序言/尾声或代码围栏。
171+
- 保持编辑最小且可逆;包含简洁证据。
172+
173+
### 运行套件
174+
1) 推送您的分支,然后从 Actions 标签手动运行工作流。
175+
2) 作业将报告写入 `reports/` 并上传工件。
176+
3) "JUnit Test Report" 检查总结结果;打开作业摘要查看完整 markdown。
177+
178+
### 查看结果
179+
- 作业摘要:GitHub Actions 标签中运行的内联 markdown 摘要
180+
- 检查:PR/提交上的"JUnit Test Report"。
181+
- 工件:`claude-nl-suite-artifacts` 包含 XML 和 MD。
182+
183+
### MCP 连接调试
184+
- *在 Unity MCP 窗口(编辑器内)启用调试日志* 以查看连接状态、自动设置结果和 MCP 客户端路径。它显示:
185+
- bridge 启动/端口、客户端连接、严格帧协商和解析的帧
186+
- 自动配置路径检测(Windows/macOS/Linux)、uv/claude 解析和显示的错误
187+
- 在 CI 中,如果启动失败,作业会尾随 Unity 日志(序列号/许可证/密码/令牌已编辑)并打印套接字/状态 JSON 诊断。
188+
189+
## 工作流程
190+
191+
1. **进行更改** 到此目录中的源代码
192+
2. **部署** 使用 `deploy-dev.bat`
193+
3. **测试** 在 Unity 中(首先重启 Unity 编辑器)
194+
4. **迭代** - 根据需要重复步骤 1-3
195+
5. **恢复** 完成后使用 `restore-dev.bat` 恢复原始文件
196+
197+
## 故障排除
198+
199+
### 运行 .bat 文件时出现"路径未找到"错误
200+
- 验证 Unity 包缓存路径是否正确
201+
- 检查是否实际安装了 MCP for Unity 包
202+
- 确保通过 MCP 客户端安装了服务器
203+
204+
### "权限被拒绝"错误
205+
- 以管理员身份运行 cmd
206+
- 部署前关闭 Unity 编辑器
207+
- 部署前关闭任何 MCP 客户端
208+
209+
### "备份未找到"错误
210+
- 首先运行 `deploy-dev.bat` 创建初始备份
211+
- 检查备份目录权限
212+
- 验证备份目录路径是否正确
213+
214+
### Windows uv 路径问题
215+
- 在 Windows 上测试 GUI 客户端时,优先选择 WinGet Links `uv.exe`;如果存在多个 `uv.exe`,使用"Choose `uv` Install Location"来固定 Links shim。

README-DEV.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# MCP for Unity Development Tools
22

3+
| [English](README-DEV.md) | [简体中文](README-DEV-zh.md) |
4+
|---------------------------|------------------------------|
5+
36
Welcome to the MCP for Unity development environment! This directory contains tools and utilities to streamline MCP for Unity core development.
47

58
## 🚀 Available Development Features

0 commit comments

Comments
 (0)