92 lines
4.2 KiB
Markdown
92 lines
4.2 KiB
Markdown
# UI 生成规则(AI JSON → Prefab)
|
||
|
||
> AIGame 竖屏微信小游戏版。精简系统提示词见 `Doc/Rule/UIGenerationPrompt.md`。总览见 `Doc/UI_AutoGen_Overview.md`。
|
||
|
||
## Part A - 流水线
|
||
|
||
```text
|
||
需求说明
|
||
-> AI 读规则/设计/切图清单/样例 JSON
|
||
-> 生成 Doc/UIPrefabCreater/{UIName}.json
|
||
-> Unity 获焦或菜单 Tools/UI/...
|
||
-> JsonUIPrefabBuilder 生成 Assets/Bundles/UI/Prefab/{UIName}.prefab
|
||
-> HotUpdate C# 按节点名 / bindings / events 接管
|
||
```
|
||
|
||
不使用 HTML 中间层。转换器:
|
||
|
||
- `AIClient/Assets/Editor/UI/JsonUIPrefabBuilder.cs`
|
||
- `AIClient/Assets/Editor/UI/JsonUIAutoConvert.cs`
|
||
|
||
### 目录
|
||
|
||
| 类型 | 路径 |
|
||
| --- | --- |
|
||
| JSON | `Doc/UIPrefabCreater/{UIName}.json` |
|
||
| Prefab | `Assets/Bundles/UI/Prefab/{UIName}.prefab` |
|
||
| 通用贴图 | `Assets/Bundles/UI/Texture/Common/` |
|
||
| 业务贴图 | `Assets/Bundles/UI/Texture/<Module>/` |
|
||
|
||
## Part B - AI 契约
|
||
|
||
### 必读
|
||
|
||
- `Doc/Rule/UnityUIProject.md`
|
||
- `Doc/Design/UI_Design_Principles.md`
|
||
- `Doc/UI_Normal_Set.md` 或 `Doc/UI_Pic_Set.md`
|
||
- `Doc/UIPrefabCreater/UI_ConfirmDialog.json`(样例)
|
||
- 转换器当前支持的组件(以代码为准)
|
||
|
||
### 顶层字段
|
||
|
||
`schemaVersion`(`1`)、`prefabName`、`prefabPath`、`description`、`canvas`、`assets`、`nodes`、`bindings`、`events`。
|
||
|
||
`canvas.canvasScaler.referenceResolution` **必须为 `[1080, 1920]`**。
|
||
|
||
### 命名
|
||
|
||
英文节点:`UI_` / `Panel` / `Img_` / `Txt_` / `Btn_` / `Scroll_` / `Group_`。
|
||
|
||
### 可生成组件
|
||
|
||
Canvas、CanvasScaler、GraphicRaycaster、CanvasGroup、Image、TextMeshProUGUI、Button、Shadow、Outline、ScrollRect、RectMask2D、Mask、TMP_InputField、VerticalLayoutGroup、ContentSizeFitter、LayoutElement、MonoBehaviour。
|
||
|
||
未完整实现(跳过/告警):Toggle、TMP_Dropdown、Slider、Scrollbar、ScrollView(请用 ScrollRect)。
|
||
|
||
### 按钮 / 列表模板
|
||
|
||
- 按钮:`Image`(Sliced)+ `Button`(SpriteSwap:normal/pressed/disabled;无 hover 切图可用 ColorTint)。
|
||
- `Button.transition: ColorTint` 支持 `normalColor` / `highlightedColor` / `pressedColor` / `selectedColor` / `disabledColor` / `fadeDuration`;不填时沿用 Unity 默认。可选 `targetGraphic` 为 Graphic 节点名,可将点击区域与实际变色的子图标分开(Mint 关闭按钮)。
|
||
- 列表:`ScrollRect` → Viewport(RectMask2D)→ Content(VerticalLayoutGroup + ContentSizeFitter)→ Item_Template。
|
||
|
||
### 标准控件九宫格(必须)
|
||
|
||
- 面板、按钮及所有状态、输入框、列表项、页签、进度条、滑条/滚动条、Toast、开关底图必须使用 `Image.imageType: Sliced`,Sprite 配置有效的非零 `Border` 和 `Full Rect`。
|
||
- `UiSpriteNineSliceRules.cs` 自动维护 Common 的标准控件导入设置;已有资源执行 `Tools/UI/Apply Standard Control Nine-Slice` 后重建对应 JSON Prefab。边界取自 `UI_Normal_Set.md` 并按实际切图尺寸换算,包含 2px 透明留边;Unity 的 Border Vector4 顺序为 L,B,R,T。
|
||
- 转换器检查标准控件的 Image 类型、Sprite 及 Border(包含 Button 状态图);省略 Image 类型时默认 Sliced。
|
||
- 新增标准控件须扩展切图清单与导入规则。图标、插画、带完整符号的关闭/返回图等整图保持 Simple、等比显示。
|
||
|
||
## Part C - 接管与排错
|
||
|
||
1. 确认自动转换开启,或执行 `Convert Changed JSON Prefabs Now`。
|
||
2. 看 Console `[UIGen]` 日志。
|
||
3. 打开 Prefab 核对层级/Sprite/文字。
|
||
4. HotUpdate 挂控制器:`transform.Find` / 递归按名查找;`button.onClick.AddListener`。
|
||
5. 资源加载走 YooAsset **异步**(见 `ProjectDesign.md` / `UnityUIProject.md`)。
|
||
|
||
| 现象 | 处理 |
|
||
| --- | --- |
|
||
| JSON 不转换 | 获焦/手动菜单;确认 JSON 比 Prefab 新 |
|
||
| referenceResolution 错误 | 改为 `[1080,1920]` |
|
||
| 找不到 Sprite | 短名与 Common 切图一致;Texture Type=Sprite |
|
||
| 文字不可读 | Outline/Shadow,色 `#102033` / `#0B1724` |
|
||
|
||
### 提交前自检
|
||
|
||
- JSON 在 `Doc/UIPrefabCreater`;唯一根节点;`prefabName` 一致。
|
||
- 父先于子;Sprite 已登记;九宫格 `Sliced`;TMP;bindings/events 节点存在。
|
||
|
||
## Part D - 后续
|
||
|
||
优先补齐转换器:Toggle → Slider → Scrollbar → TMP_Dropdown。图集自动化见 `Doc/UI_Atlas_Pipeline.md`。
|