2026-07-07 18:36:15 +08:00
|
|
|
|
# UI 拼接工具
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 目的
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
UI 拼接工具通过 JSON 与 Unity Prefab 双向转换,帮助 Codex 和开发人员创建基础 UI 层级、检查现有 Prefab,并继续在 Unity 中完成业务绑定和视觉校对。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 当前实现
|
2026-07-07 18:36:15 +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-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
当前外部入口是 MCP Bridge,不使用文件监听或文本触发命令。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 数据结构
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
根节点使用 `UILayoutData`:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
|
|
|
|
|
```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-07 18:36:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
子节点使用 `UIElementData`,可配置 `rectTransform`、`image`、`button`、`text`、`layoutGroup`、`scrollRect`、`toggle`、`slider`、`inputField`、`customComponents` 和递归 `children`。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 支持组件
|
2026-07-07 18:36:15 +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-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
资源字段使用 Unity Asset 路径,例如 `Assets/Game/...`,路径分隔符统一使用 `/`。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## MCP 调用
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
生成 Prefab:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
```text
|
|
|
|
|
|
unity_generate_ui_prefab(jsonPath, prefabPath)
|
2026-07-07 18:36:15 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
导出 Prefab:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
```text
|
|
|
|
|
|
unity_export_prefab_to_json(prefabPath, jsonPath)
|
2026-07-07 18:36:15 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
路径由当前任务明确传入,不规定固定测试目录或中间数据目录。目标正式窗口通常位于:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
```text
|
|
|
|
|
|
Assets/Game/GameHFResource/<语言>/UIWindows/<WindowName>/<WindowName>.prefab
|
2026-07-07 18:36:15 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 标准流程
|
2026-07-07 18:36:15 +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-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
工具生成成功只表示 Prefab 文件已创建,不表示 UI 已完成。业务脚本、列表初始化、字体、图集、点击区域和视觉结果仍需验证。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 安全规则
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- 覆盖已有 Prefab 前确认目标路径和现有内容。
|
|
|
|
|
|
- 不通过 UI 生成工具批量删除、移动资源或执行构建发布。
|
|
|
|
|
|
- Unity API 必须由 Bridge 排队到 Editor 主线程执行。
|
|
|
|
|
|
- 生成后检查 Git 差异,避免无意义重序列化其他资源。
|
|
|
|
|
|
- JSON 递归结构出现 serialization depth warning 时检查实际生成结果;新增 Error 必须处理。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
|
|
|
|
|
## 文档关联
|
|
|
|
|
|
|
|
|
|
|
|
| 文档 | 关联原因 |
|
|
|
|
|
|
|---|---|
|
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 调用和安全边界 |
|