2026-07-10 17:50:20 +08:00
|
|
|
|
# UI 界面拼接
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 10:15:09 +08:00
|
|
|
|
本文是根据示意图制作 UI 窗口的完整规则来源。生命周期和列表 API 见 [UI 开发指南](开发指南.md),通用执行与授权流程见 [工作流清单](../../../rules/40-工作流清单.md)。其他入口只引用本文,不重复维护整套规则。
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
## 一、输入与目标
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 11:04:12 +08:00
|
|
|
|
开始拼接前,先向开发者确认目标分辨率、横竖屏、SafeArea 与屏幕适配要求,以及窗口是全屏、弹窗还是局部面板。开发者已经明确提供的信息不重复询问;项目现有 CanvasScaler 等配置只能作为参考,不能代替需求确认,也不得直接套用某个项目的分辨率。未确认时可继续检查结构与资源,不先定稿依赖分辨率的切图尺寸和布局。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
|
|
|
|
|
|
同时检查:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- 设计原图、标注图或 PSD 中的尺寸、间距和层级。
|
|
|
|
|
|
- 项目现有 Sprite、SpriteAtlas、字体、材质和可复用 Prefab。
|
|
|
|
|
|
- 目标窗口名、Prefab 路径、Canvas 层级和脚本绑定方式。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
- 示意图对应的状态、滚动区域和本次需要实现的交互范围。
|
|
|
|
|
|
|
|
|
|
|
|
先理解当前项目的窗口基类、Item 基类、SFUI/UIMono、资源加载、节点绑定与事件规范,优先复用相似窗口。给出简短的节点、切图、复用和验证方案;已明确授权的方案直接实施。不为拼界面另建框架或修改无关业务、第三方库。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 11:04:12 +08:00
|
|
|
|
优先复用语义和视觉均匹配的现有资源,或从提供的分层源文件提取。只有示意图时,可以在任务授权范围内拆图、抠图和处理透明边缘;不能只凭截图选择近似资源。缺失或无法准确提取的部分按下述规则明确暴露。
|
|
|
|
|
|
|
|
|
|
|
|
### 缺失与质量问题必须可见
|
|
|
|
|
|
|
|
|
|
|
|
- 始终保证开发者能够明确看到哪儿有问题、哪儿缺东西。记录具体窗口、节点或画面区域,以及缺少的资源、质量问题、影响和需要提供的素材。
|
|
|
|
|
|
- 被遮挡、源图低清、元素不完整或无法干净分离时,报出问题;即使没有其他可用素材,也不补画、重绘、生成式填补或猜测还原缺失内容,不用其他图片、假数据或隐藏节点掩盖缺口。
|
|
|
|
|
|
- 抠图中的裁剪、透明边缘处理和尺寸调整仅处理已有可见内容,不能借机补造原图中缺失的部分。
|
|
|
|
|
|
- 对照预览中,在问题位置使用明确的诊断文字或标注框,例如“缺少关闭按钮素材”“图标无法完整提取”;标注是给开发者定位问题的诊断信息,不是替代美术资源,也不能混入正式运行资源。不能仅依赖容易被忽略的空白或控制台日志。
|
|
|
|
|
|
- 暂时无法渲染时,先提供具体节点路径、资源路径或示意图区域说明,并按 [工作流清单](../../../rules/40-工作流清单.md) 修复验证环境;恢复后补充可视化标注。问题可以保留为待解决项,但不能宣称对应资源或视觉效果已验收完成。
|
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
|
|
|
|
|
|
WindowName
|
|
|
|
|
|
├── ImgBg
|
|
|
|
|
|
├── HeaderArea
|
|
|
|
|
|
├── ContentArea
|
|
|
|
|
|
│ ├── StaticContent
|
|
|
|
|
|
│ └── ListView
|
|
|
|
|
|
│ └── viewport
|
|
|
|
|
|
│ └── content
|
|
|
|
|
|
│ └── ItemTemplate (inactive)
|
|
|
|
|
|
├── FooterArea
|
|
|
|
|
|
└── PopupOrEffectArea
|
2026-07-07 18:36:15 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- 按视觉和功能边界组织节点,不为每个图片增加无意义容器。
|
|
|
|
|
|
- 节点命名应能对应脚本字段和功能,例如 `Btn_Close`、`Txt_Title`、`Img_Icon`。
|
|
|
|
|
|
- 复用 Item 或子面板时保持独立根节点,便于 UIMono 绑定和对象复用。
|
|
|
|
|
|
- 全屏背景使用稳定锚点;局部模块使用明确尺寸,避免依赖编辑器当前分辨率。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
- 背景主要承载底板和固定装饰;关闭按钮、页签、操作按钮及其状态独立实现,不烘焙在背景中。
|
|
|
|
|
|
- 动态名称、进度、数量和提示使用文字组件;固定装饰性标题可以使用图片,但不能妨碍交互、适配及明确要求的本地化。
|
|
|
|
|
|
- 不用整张效果图替代可交互窗口;按示意图核对整体轮廓、比例、间距、层级和遮挡关系。
|
|
|
|
|
|
|
|
|
|
|
|
## 三、画布与图片尺寸
|
|
|
|
|
|
|
|
|
|
|
|
- 以开发者确认的分辨率建立基准画布,按适配要求统一 CanvasScaler、Sprite PPU 与项目约定。
|
|
|
|
|
|
- RectTransform 缩放默认保持 `1`,主要通过尺寸、锚点和布局控制显示,不靠缩小 Transform 匹配超大源图。
|
|
|
|
|
|
- **普通、不可拉伸的图片,执行 `SetNativeSize()` 后应达到目标画布中的预期尺寸。** 检查导入后的 Sprite 尺寸及 PPU 与 Canvas 的关系,不能只检查源 PNG。
|
|
|
|
|
|
- 三宫格、九宫格图片使用紧凑源图,通过 RectTransform 设置最终显示尺寸。
|
|
|
|
|
|
|
|
|
|
|
|
## 四、切图与资源效率
|
|
|
|
|
|
|
|
|
|
|
|
- 每个独立 UI 元素默认使用单张图片,**Sprite Mode 默认 Single**。开发者有单独要求时,允许 Multiple 或其他组织方式,不作绝对禁止。
|
|
|
|
|
|
- Sprite Mode 与图集打包分别处理;Single 图片仍可按项目规范进入 SpriteAtlas。名称应表达用途和状态。
|
|
|
|
|
|
- **普通图片在保证 `SetNativeSize()` 尺寸正确、最终显示不模糊的前提下,以尽量少占内存、尽量快加载为原则。** 避免超过实际需求的像素尺寸,不用过度降采样或压缩牺牲清晰度。
|
|
|
|
|
|
- 去除无用透明留白,保留必要的阴影、描边、柔边和装饰;裁剪后同步调整定位,保持视觉位置一致。
|
|
|
|
|
|
- 清除毛刺、杂点、残留底色、白边和黑边,在浅色、深色背景下检查透明边缘。缩小后重新检查,不能只验收原始大图。
|
|
|
|
|
|
- 按目标平台、透明通道和图片内容选择纹理格式与压缩;Mipmap、Read/Write、过滤和图集设置按用途配置,不盲目沿用默认值。
|
|
|
|
|
|
- 不单凭磁盘文件大小判断运行时内存与加载效率;需要比较方案时,以导入信息及目标平台测量为依据。
|
|
|
|
|
|
- 缩放、压缩或打图集后检查最终导入和渲染结果。
|
|
|
|
|
|
|
|
|
|
|
|
## 五、三宫格与九宫格
|
|
|
|
|
|
|
|
|
|
|
|
- 仅纵向伸缩的图片优先纵向三宫格,仅横向伸缩的图片优先横向三宫格。
|
|
|
|
|
|
- 同时改变宽高的规则面板、卡片和按钮优先九宫格。
|
|
|
|
|
|
- Border 必须保护圆角、描边、阴影和固定装饰;拉伸区域选择适合伸展的纯色、渐变或规则区域。
|
|
|
|
|
|
- 可以缩减源图中可拉伸区域的像素尺寸,保留固定边缘;检查最终尺寸下的接缝、渐变和装饰是否自然。
|
|
|
|
|
|
- 复杂插画、不规则图标或无法合理分离拉伸区域的图片,不强行切片。
|
|
|
|
|
|
- 修改源图尺寸后重新检查 Border,并配置对应 Image 的切片显示方式,不能只写 Border 而仍按普通图片整体拉伸。
|
|
|
|
|
|
|
|
|
|
|
|
## 六、组件、布局与交互
|
|
|
|
|
|
|
|
|
|
|
|
- 使用项目对应的 SFUI 图片、文字、按钮、Toggle、ScrollRect 等组件,以及既有节点行为和绑定流程。
|
|
|
|
|
|
- 组件接口、序列化与初始化以当前项目源码为准,不凭名称或原生 UGUI 经验推断。
|
|
|
|
|
|
- 按适配要求配置锚点、pivot、布局约束与遮罩;避免布局组件互相冲突或依赖偶然执行顺序。
|
|
|
|
|
|
- 纯装饰图片与文字关闭不必要的射线检测,避免遮挡按钮、页签和滚动操作。
|
|
|
|
|
|
- 点击区域与视觉表达一致,必要时按项目约定扩大;检查长文本、数量位数及动态内容变化。
|
|
|
|
|
|
|
|
|
|
|
|
## 七、页签与共享内容
|
|
|
|
|
|
|
|
|
|
|
|
- 互斥页签使用 **Toggle + ToggleGroup**;SFUI 项目使用对应的 SFUI Toggle。
|
|
|
|
|
|
- 普通态与选中态由 Toggle 状态驱动;监听变化时仅在选中状态执行切页,正确设置默认选中项并避免初始化重复刷新。
|
|
|
|
|
|
- 除非开发者或项目另有要求,不用普通按钮和独立布尔变量重复实现页签状态。
|
|
|
|
|
|
- 展示结构一致的页签共用一个内容面板、列表和 Item 模板,切页更新数据与必要状态,不复制两套完整界面。
|
|
|
|
|
|
- 文字、图标、奖励或进度不同不是新增模板的理由;只有结构确实不同时才增加模板。
|
|
|
|
|
|
- 明确切页是否回到顶部、同页更新是否保持滚动位置。
|
|
|
|
|
|
|
|
|
|
|
|
## 八、列表选择与复用
|
|
|
|
|
|
|
|
|
|
|
|
- 动态列表优先使用项目的 **SFUI_ScrollRect**。先读取当前实现和使用示例,再选择 `BindEvent` 或项目已接入的 LoopListView2 / LoopGridView 包装,不能混用或因拼 UI 强行迁移。
|
|
|
|
|
|
- `BindEvent` 按数据索引动态选择模板;参数职责、刷新入口和其他包装示例统一见 [UI 开发指南](开发指南.md)。
|
|
|
|
|
|
- 使用列表已有的创建与复用机制,不额外手动批量生成节点。
|
|
|
|
|
|
- Item 每次刷新完整更新文字、图标、进度、按钮状态、可选节点与高度,避免旧状态残留及回调持有过期数据。
|
|
|
|
|
|
- 模板保持禁用,尺寸、pivot 和滚动方向匹配;组件遵循当前框架要求,不重复序列化由列表运行时添加的组件。
|
|
|
|
|
|
- LayoutGroup/ContentSizeFitter 是否保留或关闭取决于当前列表实现;不要混用不同包装的布局机制。
|
|
|
|
|
|
|
|
|
|
|
|
## 九、数据与生命周期边界
|
|
|
|
|
|
|
|
|
|
|
|
- 仅拼 UI 时,不擅自扩展协议、数据模型和业务逻辑。
|
|
|
|
|
|
- 接入业务时由管理器持有和更新业务数据,通过项目事件机制通知界面;采用 CTC 的项目使用 CTC 刷新。
|
|
|
|
|
|
- 界面负责展示与转交操作,不自行维护另一份权威业务状态。
|
|
|
|
|
|
- 订阅和解除成对,重复开关、启用窗口及 Item 复用不能叠加监听;生命周期具体约定见 [UI 开发指南](开发指南.md)。
|
|
|
|
|
|
- 预览数据与正式运行数据分离,不能覆盖服务器状态。
|
|
|
|
|
|
|
|
|
|
|
|
## 十、拼接流程
|
|
|
|
|
|
|
|
|
|
|
|
1. 按 [AI 接入入口](../../../ai/AI接入入口.md) 读取规则和 UI 指南,完成本文的需求确认。
|
2026-07-10 17:50:20 +08:00
|
|
|
|
2. 检查目标 Prefab 是否已存在,导出或读取当前层级,避免覆盖有效结构。
|
|
|
|
|
|
3. 枚举目标资源目录和图集,建立设计元素到实际资源的对应关系。
|
|
|
|
|
|
4. 确定窗口根尺寸、锚点、主要功能区和列表类型。
|
|
|
|
|
|
5. 使用 Unity Editor 手工拼接,或通过 MCP 的 JSON 生成工具创建基础结构。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
6. 绑定 SFUI/UIMono 组件与脚本,按已授权范围补齐交互、列表和数据。
|
2026-07-10 17:50:20 +08:00
|
|
|
|
7. 刷新资源并检查 Console、Prefab 序列化结构和运行时显示。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
8. 按本文验收清单对照原图检查实际画面和交互。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
JSON 生成适合批量创建稳定层级和组件,不代替视觉校对、业务绑定和运行时验证。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 10:15:09 +08:00
|
|
|
|
## 十一、修改已有 Prefab 与资源维护
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- 先读取现有 Prefab 和脚本引用,再调整层级或组件。
|
|
|
|
|
|
- 移动、重命名节点前搜索 `FindUICtrlByName`、序列化字段和生成绑定代码。
|
|
|
|
|
|
- 只修改目标节点,避免让 Unity 重序列化无关 Prefab。
|
|
|
|
|
|
- 组件勾选状态属于 Prefab 行为的一部分;修复显示问题时同时检查 `enabled` 与 GameObject active。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
- 若已授权迁移到会关闭旧布局的列表包装,可保留旧组件序列化参数作为参考,运行时由新包装管理布局;不将该行为套用到所有列表实现。
|
|
|
|
|
|
- 原始示意图、源图和中间素材保存在约定的美术或策划归档目录,运行时目录只保留实际需要的资源。
|
|
|
|
|
|
- 删除资源前检查 Prefab、场景、代码、配置、图集和生成工具引用,并遵守开发者授权范围。
|
|
|
|
|
|
- 有生成工具时同步修改生成源,避免重新生成旧布局或无用资源;不能只手工修补生成结果。
|
|
|
|
|
|
- 替换已有资源时尽量保留 GUID,避免引用断裂;保留用户已有的无关修改。
|
|
|
|
|
|
|
|
|
|
|
|
## 十二、验收与交付
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 10:15:09 +08:00
|
|
|
|
在开发者确认的目标分辨率及必要的适配尺寸下实际渲染,保存可复核的对照画面并检查:
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- Prefab 路径和窗口 attribute 一致。
|
|
|
|
|
|
- Sprite、字体、材质和图集引用有效。
|
|
|
|
|
|
- 锚点、pivot、sizeDelta 和层级与设计目标一致。
|
|
|
|
|
|
- 按钮、文本、列表、进度和弹窗交互正确。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
- 背景、装饰、整体比例、间距、颜色和字体符合示意图,普通图片 SetNativeSize 尺寸正确且清晰。
|
|
|
|
|
|
- 三宫格、九宫格的边角、接缝、渐变和拉伸效果自然;压缩、打图集后的透明边缘和清晰度符合要求。
|
|
|
|
|
|
- 页签普通态、选中态、内容切换正确,同结构页签共享列表和模板。
|
|
|
|
|
|
- 空列表、短列表、长列表、滚动到底部、内容高度变化及 Item 复用正常。
|
|
|
|
|
|
- 极长文本、不同分辨率和重复打开不破版,业务涉及的未完成、可操作、已完成、禁用等状态正确。
|
|
|
|
|
|
- 重复切页、开关及启用窗口无重复回调、状态残留或缺失引用。
|
2026-07-10 17:50:20 +08:00
|
|
|
|
- Unity Console 无本次新增 Error,运行时实际显示通过确认。
|
2026-07-07 18:36:15 +08:00
|
|
|
|
|
2026-10-20 11:04:12 +08:00
|
|
|
|
编译通过、Prefab 保存成功或 JSON 生成成功不能代替视觉和交互验收。资源缺失与质量问题必须按本文在预览和交付中明确标出;验证环境不可用时,按 [工作流清单](../../../rules/40-工作流清单.md) 先修复再验证。无法自行解除的阻塞明确说明,保持相关检查未完成,不能仅报告“未验证”便宣称任务完成。
|
2026-10-20 10:15:09 +08:00
|
|
|
|
|
|
|
|
|
|
交付时说明修改的窗口、脚本和资源,确认的基准分辨率与适配方式,主要图片尺寸及三宫格/九宫格设置,已完成的编译、视觉和交互验证,以及未验证内容、已知限制和必要后续操作。
|
|
|
|
|
|
|
2026-07-07 18:36:15 +08:00
|
|
|
|
## 文档关联
|
|
|
|
|
|
|
|
|
|
|
|
| 文档 | 关联原因 |
|
|
|
|
|
|
|---|---|
|
2026-07-10 17:50:20 +08:00
|
|
|
|
| [UI 窗口系统](README.md) | 窗口框架和资源路径 |
|
|
|
|
|
|
| [UI 开发指南](开发指南.md) | 生命周期和虚拟列表接口 |
|
|
|
|
|
|
| [UI 拼接工具](../编辑器工具/UI拼接工具.md) | MCP JSON/Prefab 工具 |
|
2026-07-21 13:16:45 +08:00
|
|
|
|
| [MCP 使用规则](../编辑器工具/MCP工具/Codex_Unity_MCP使用规则.md) | Codex 与 Unity 的调用规则 |
|