Files
UnityAI/modules/frameworks/编辑器工具/UI拼接工具.md

105 lines
3.7 KiB
Markdown
Raw Normal View History

# UI 拼接工具
2026-07-10 17:50:20 +08:00
## 目的
2026-07-10 17:50:20 +08:00
UI 拼接工具通过 JSON 与 Unity Prefab 双向转换,帮助 Codex 和开发人员创建基础 UI 层级、检查现有 Prefab并继续在 Unity 中完成业务绑定和视觉校对。
2026-07-10 17:50:20 +08:00
## 当前实现
2026-07-10 17:50:20 +08:00
| 组件 | 位置 | 职责 |
|---|---|---|
| `UIPrefabGenerator` | `Assets/Editor/Command/UIPrefabGenerator.cs` | 读取 UI JSON 并生成 Prefab |
| `UIPrefabToJson` | `Assets/Editor/Command/UIPrefabToJson.cs` | 导出 Prefab 的层级和组件数据 |
| Unity Bridge | `Assets/Editor/Command/CodexUnityEditorBridge.cs` | 在 Unity 主线程执行生成和导出命令 |
| MCP Server | `UnityAI/Tools/CodexUnityMcp/` | 把 Unity Bridge 命令暴露给 Codex |
2026-07-10 17:50:20 +08:00
当前外部入口是 MCP Bridge不使用文件监听或文本触发命令。
2026-07-10 17:50:20 +08:00
## 数据结构
2026-07-10 17:50:20 +08:00
根节点使用 `UILayoutData`
```json
{
2026-07-10 17:50:20 +08:00
"name": "ExampleWindow",
"type": "Canvas",
"layer": 5,
"rectTransform": {
"anchorMin": [0.5, 0.5],
"anchorMax": [0.5, 0.5],
"position": [0, 0, 0],
"sizeDelta": [1080, 1920],
"pivot": [0.5, 0.5],
"localScale": [1, 1, 1],
"localRotation": [0, 0, 0]
},
"children": []
}
```
2026-07-10 17:50:20 +08:00
子节点使用 `UIElementData`,可配置 `rectTransform``image``button``text``layoutGroup``scrollRect``toggle``slider``inputField``customComponents` 和递归 `children`
2026-07-10 17:50:20 +08:00
## 支持组件
2026-07-10 17:50:20 +08:00
- `Image` / `SFUI_Image`
- `Button` / `SFUI_Button`
- `TextMeshProUGUI` / `SFUI_TextMeshProUGUI`
- `RectTransform``Canvas``CanvasScaler``GraphicRaycaster`
- `ScrollRect` / `SFUI_ScrollRect`
- `SFUI_Viewport``SFUI_Content``SFUI_ListViewItem`
- `GridLayoutGroup``VerticalLayoutGroup``HorizontalLayoutGroup`
- `Toggle` / `SFUI_Toggle`
- `Slider` / `SFUI_Slider`
- `InputField` / `SFUI_InputField`
2026-07-10 17:50:20 +08:00
资源字段使用 Unity Asset 路径,例如 `Assets/Game/...`,路径分隔符统一使用 `/`
2026-07-10 17:50:20 +08:00
## MCP 调用
2026-07-10 17:50:20 +08:00
生成 Prefab
2026-07-10 17:50:20 +08:00
```text
unity_generate_ui_prefab(jsonPath, prefabPath)
```
2026-07-10 17:50:20 +08:00
导出 Prefab
2026-07-10 17:50:20 +08:00
```text
unity_export_prefab_to_json(prefabPath, jsonPath)
```
2026-07-10 17:50:20 +08:00
路径由当前任务明确传入,不规定固定测试目录或中间数据目录。目标正式窗口通常位于:
2026-07-10 17:50:20 +08:00
```text
Assets/Game/GameHFResource/<语言>/UIWindows/<WindowName>/<WindowName>.prefab
```
2026-07-10 17:50:20 +08:00
## 标准流程
2026-07-10 17:50:20 +08:00
1. 先读 [UI 界面拼接](../UI窗口系统/界面拼接.md) 和 [UI 开发指南](../UI窗口系统/开发指南.md)。
2. 调用 `unity_health` 确认 Unity 项目和版本。
3. 检查目标 Prefab、窗口脚本和可用资源。
4. 生成基础 Prefab或先导出现有 Prefab 再调整 JSON。
5. 调用 `unity_refresh_assets`
6. 调用 `unity_get_console_logs` 检查 Error 和关键 Warning。
7. 在 Unity 中检查层级、RectTransform、组件、资源引用和实际显示。
2026-07-10 17:50:20 +08:00
工具生成成功只表示 Prefab 文件已创建,不表示 UI 已完成。业务脚本、列表初始化、字体、图集、点击区域和视觉结果仍需验证。
2026-07-10 17:50:20 +08:00
## 安全规则
2026-07-10 17:50:20 +08:00
- 覆盖已有 Prefab 前确认目标路径和现有内容。
- 不通过 UI 生成工具批量删除、移动资源或执行构建发布。
- Unity API 必须由 Bridge 排队到 Editor 主线程执行。
- 生成后检查 Git 差异,避免无意义重序列化其他资源。
- JSON 递归结构出现 serialization depth warning 时检查实际生成结果;新增 Error 必须处理。
## 文档关联
| 文档 | 关联原因 |
|---|---|
2026-07-10 17:50:20 +08:00
| [编辑器工具入口](README.md) | 编辑器工具模块入口 |
| [UI 窗口系统](../UI窗口系统/README.md) | 窗口框架和资源路径 |
| [UI 界面拼接](../UI窗口系统/界面拼接.md) | 视觉与 Prefab 流程 |
| [MCP 使用规则](MCP工具/CrystalBattle_Codex_Unity_MCP使用规则.md) | Codex 调用和安全边界 |