# UI 界面拼接 ## 一、输入与目标 开始拼接前同时确认: - 设计原图、标注图或 PSD 中的尺寸、间距和层级。 - 项目现有 Sprite、SpriteAtlas、字体、材质和可复用 Prefab。 - 目标窗口名、Prefab 路径、Canvas 层级和脚本绑定方式。 - 目标分辨率、SafeArea、横竖屏和滚动区域。 不能只凭截图选择近似资源。设计图中的可检查对象必须使用语义正确的现有资源;缺失资源应明确记录,不能用无关图片顶替。 ## 二、推荐层级 ```text WindowName ├── ImgBg ├── HeaderArea ├── ContentArea │ ├── StaticContent │ └── ListView │ └── viewport │ └── content │ └── ItemTemplate (inactive) ├── FooterArea └── PopupOrEffectArea ``` - 按视觉和功能边界组织节点,不为每个图片增加无意义容器。 - 节点命名应能对应脚本字段和功能,例如 `Btn_Close`、`Txt_Title`、`Img_Icon`。 - 复用 Item 或子面板时保持独立根节点,便于 UIMono 绑定和对象复用。 - 全屏背景使用稳定锚点;局部模块使用明确尺寸,避免依赖编辑器当前分辨率。 ## 三、列表选择 - 单列或单行滚动:LoopListView2。 - 固定多列或网格:LoopGridView。 - 模板节点保持禁用,尺寸、pivot 和滚动方向必须匹配。 - 虚拟列表不依赖旧 LayoutGroup/ContentSizeFitter 运行时排版。 - 具体初始化接口见 [UI 开发指南](开发指南.md)。 ## 四、拼接流程 1. 读取 [UnityAI README](../../../README.md) 中的 UI 入口和相关指南。 2. 检查目标 Prefab 是否已存在,导出或读取当前层级,避免覆盖有效结构。 3. 枚举目标资源目录和图集,建立设计元素到实际资源的对应关系。 4. 确定窗口根尺寸、锚点、主要功能区和列表类型。 5. 使用 Unity Editor 手工拼接,或通过 MCP 的 JSON 生成工具创建基础结构。 6. 绑定 SFUI/UIMono 组件与业务脚本,补齐交互、列表和动态数据。 7. 刷新资源并检查 Console、Prefab 序列化结构和运行时显示。 8. 对照原图检查尺寸、层级、颜色、字体、九宫格和点击区域。 JSON 生成适合批量创建稳定层级和组件,不代替视觉校对、业务绑定和运行时验证。 ## 五、修改已有 Prefab - 先读取现有 Prefab 和脚本引用,再调整层级或组件。 - 移动、重命名节点前搜索 `FindUICtrlByName`、序列化字段和生成绑定代码。 - 只修改目标节点,避免让 Unity 重序列化无关 Prefab。 - 组件勾选状态属于 Prefab 行为的一部分;修复显示问题时同时检查 `enabled` 与 GameObject active。 - 列表迁移后,旧布局组件可保留序列化参数作为参考,但运行时由新列表包装关闭。 ## 六、验收 - Prefab 路径和窗口 attribute 一致。 - Sprite、字体、材质和图集引用有效。 - 锚点、pivot、sizeDelta 和层级与设计目标一致。 - 按钮、文本、列表、进度和弹窗交互正确。 - 空数据、极长文本、不同分辨率和重复打开不破版。 - Unity Console 无本次新增 Error,运行时实际显示通过确认。 ## 文档关联 | 文档 | 关联原因 | |---|---| | [UI 窗口系统](README.md) | 窗口框架和资源路径 | | [UI 开发指南](开发指南.md) | 生命周期和虚拟列表接口 | | [UI 拼接工具](../编辑器工具/UI拼接工具.md) | MCP JSON/Prefab 工具 | | [MCP 使用规则](../编辑器工具/MCP工具/CrystalBattle_Codex_Unity_MCP使用规则.md) | Codex 与 Unity 的调用规则 |