# 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//` | ## 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`。