236 lines
13 KiB
Markdown
236 lines
13 KiB
Markdown
# Unity UI 组件设计原则
|
||
|
||
> 本文档依据视觉基准图 `Doc/Design/ui_design.jpg` 提炼,定义本项目休闲卡通风格 UI 的统一设计语言与各类 UGUI 控件的设计规范。
|
||
> 配套规范见 `Client/Assets/Doc/Rule/UnityProject.md`(制作流程、JSON→Prefab 管线)与 `Doc/Design/UI_Pic_Set.md`(通用控件切图清单)。
|
||
> 通用控件切图位于 `Assets/Game/Art/UI/Texture/Common`。
|
||
|
||
---
|
||
|
||
## 1. 总体视觉风格
|
||
|
||
休闲、友好、明快的卡通糖果风(casual candy style),强调“圆润、厚实、有光泽、易读”:
|
||
|
||
- **圆角厚实**:所有容器、按钮、控件均为大圆角矩形或胶囊形,无尖角;体块饱满,像玩具/糖果。
|
||
- **描边收边**:控件外缘有一圈比主体更深的同色系描边(约 2–4px),让控件从背景中“跳”出来。
|
||
- **顶部高光**:主体上半部有一道柔和的白色玻璃高光,营造塑料/糖果的反光质感。
|
||
- **柔和投影**:控件下方有短距离、低透明度的柔和阴影(非硬黑边),增强层次。
|
||
- **暖色容器 + 亮色控件**:面板多为奶油米色/浅蓝底,功能控件用高饱和糖果色点亮。
|
||
- **图标拟物 + 描边**:业务图标为有体积感的拟物卡通图标,统一带深色描边与高光。
|
||
|
||
设计目标:在手机小屏上**一眼可辨、点击区域明确、状态反馈清晰**。
|
||
|
||
---
|
||
|
||
## 2. 配色系统
|
||
|
||
以下为基准图取色(十六进制为参考值,允许 ±5% 微调;实际以切图为准)。
|
||
|
||
### 2.1 背景与容器
|
||
|
||
| 用途 | 颜色 | 参考值 |
|
||
| --- | --- | --- |
|
||
| 全局背景 | 浅蓝白 | `#EAF3F8` |
|
||
| 主面板底(奶油米) | 暖米色 | `#F6EBCF` |
|
||
| 面板描边(暖棕) | 棕 | `#C89B5C` |
|
||
| 浅蓝面板底 | 浅蓝 | `#DCEBF5` |
|
||
| 内容卡片底 | 近白 | `#FBF6E9` |
|
||
| 半透明遮罩 | 深蓝黑 | `#0B1724` @ 70–80% |
|
||
|
||
### 2.2 功能色(按钮/状态)
|
||
|
||
| 语义 | 主色 | 描边/按下态 | 用途 |
|
||
| --- | --- | --- | --- |
|
||
| 主操作 Primary | 草绿 `#7ED321` | 深绿 `#4E9A12` | 确定、开始、匹配等主行为 |
|
||
| 次操作 Secondary | 天蓝 `#43B7F5` | 深蓝 `#1E84C8` | 取消、次要行为 |
|
||
| 强调 Emphasis | 橙黄 `#FFB13C` | 深橙 `#E07C18` | 需要吸引注意但非危险 |
|
||
| 危险 Danger | 珊瑚红 `#FF5B5B` | 深红 `#D63333` | 删除、退出、警告 |
|
||
| 禁用 Disabled | 灰 `#B9C0C8` | 深灰 `#8A929B` | 不可点击 |
|
||
| 选中高亮 | 亮绿 `#9EEB3B` | — | 选中态染色/描边 |
|
||
|
||
### 2.3 文本色
|
||
|
||
| 用途 | 颜色 | 参考值 |
|
||
| --- | --- | --- |
|
||
| 深色正文(浅底上) | 深棕/深蓝灰 | `#5A4632` / `#33405E` |
|
||
| 浅色文字(按钮/深底上) | 近白 | `#F6F8FF` |
|
||
| 次要说明文字 | 蓝灰 | `#B7C2D8` |
|
||
| 数值高亮(金币/比分) | 金黄 | `#FFE27A` |
|
||
| 文字描边(统一) | 深蓝/深灰 | `#102033` / `#0B1724`(**不使用纯黑**) |
|
||
|
||
### 2.4 图标点缀色
|
||
|
||
金币金 `#F5C033`、钻石蓝 `#46C8E6`、生命红 `#FF6B83`、能量绿 `#7ED321`、星黄 `#FFD54A`、防具蓝 `#5B8FE6`,整体保持高饱和、同族描边。
|
||
|
||
---
|
||
|
||
## 3. 形状语言(圆角 / 描边 / 高光 / 阴影)
|
||
|
||
| 要素 | 规范 |
|
||
| --- | --- |
|
||
| 圆角 | 按钮/卡片圆角半径约为短边的 25–40%;胶囊控件(开关、进度条、滑条)为全圆端。 |
|
||
| 描边 | 外描边宽度 2–4px,颜色为主体色加深约 20–30%;描边随控件等比,不随九宫格拉伸变形(见第 8 节)。 |
|
||
| 高光 | 主体上半部一道柔和白色高光(透明度 30–60%),覆盖上 40% 区域,向下渐隐。 |
|
||
| 阴影 | 投影偏移 `(0, -6 ~ -8)`,颜色 `#06101F` @ 70–80%,软边;用 UGUI `Shadow` 组件实现。 |
|
||
| 内凹 | 进度条/滑条/输入框的“槽”为内凹深色底,填充为带高光的亮色,形成凹凸对比。 |
|
||
|
||
---
|
||
|
||
## 4. 字体与可读性
|
||
|
||
- 统一使用 **TextMeshPro**(`TextMeshProUGUI` / `TMP_InputField` / `TMP_Dropdown`),默认字体思源黑体 CN Regular(`Assets/Game/Art/UI/Font/SourceHanSansCN-Regular.otf` 的 SDF 资源)。
|
||
- **字号层级**(2048×1024 设计分辨率参考):界面标题 36–40;区块标题 28–32;按钮文字 24–30;正文/列表 20–24;说明/次要 18–20;大数值(比分等)64–80。
|
||
- **字重**:标题、按钮、状态、倒计时用 Bold;正文用 Regular。
|
||
- **可读性**(与 `UnityProject.md` 第 38–40 条一致):
|
||
- 浅色文字位于图片背景、高饱和按钮、半透明面板上时,**必须**加深蓝/深灰描边或阴影(`#102033` / `#0B1724`),描边宽度保持轻量,避免粗黑边弄脏画面。
|
||
- 普通正文、列表、输入框文本优先靠背景对比度保证可读,不默认加描边。
|
||
- 深底面板放浅色字、浅底面板放深色字;避免浅色字直接压在浅底上。
|
||
|
||
---
|
||
|
||
## 5. 各控件设计原则
|
||
|
||
### 5.1 面板 / 弹窗 (Panel)
|
||
|
||
- 结构:标题栏(深色木纹/蓝色横幅)+ 内容区(奶油米底)+ 操作区(底部按钮)。
|
||
- 弹窗右上角固定圆形关闭按钮(红色 `btn_close`);模态弹窗下方铺半透明遮罩拦截点击。
|
||
- 切图:`ui_panel_main`(主窗)、`ui_panel_popup`(弹窗)、`ui_panel_content`(内容卡)、`ui_panel_header`(标题栏)、`ui_panel_tooltip`(提示),均为 **九宫格 Sliced**。
|
||
- 内容区四周留白≥24px;标题居中或左对齐配图标。
|
||
|
||
### 5.2 按钮 (Button)
|
||
|
||
- 四种语义色:主(绿)/次(蓝)/强调(橙)/危险(红),外形一致仅配色不同。
|
||
- **必须实现完整状态**(`Button` + SpriteSwap,见第 7 节):Normal / Highlighted(Hover) / Pressed / Disabled。
|
||
- 按下态:颜色加深 + 视觉下沉(高光减弱、整体下移 1–2px 的观感)。
|
||
- 文字白色 + 轻描边;带图标时图标在左、文字居中或图标在上文字在下。
|
||
- 尺寸:主按钮高度≥72(设计分辨率),点击热区不小于可视区;小按钮成组排列。
|
||
- 切图:`btn_primary_*`、`btn_secondary_*`、`btn_warning_*`、`btn_small_*`、圆形 `btn_close`/`btn_back`/`btn_home`。
|
||
|
||
### 5.3 输入框 (TMP_InputField)
|
||
|
||
- 浅蓝/白圆角底,内凹观感;左侧可选图标,右侧可选功能图标(编辑/搜索/清空)。
|
||
- 必须声明 `placeholder`、`characterLimit`、`contentType`(密码用 `Password`)。
|
||
- 占位符用次要蓝灰色 `#B7C2D8`;输入文本用深色,靠背景对比保证可读,不加描边。
|
||
- 切图:`input_bg_normal` / `input_bg_focus` / `input_bg_error`,光标 `input_caret`。
|
||
|
||
### 5.4 下拉框 (TMP_Dropdown)
|
||
|
||
- 暖黄/白圆角底,右侧朝下三角箭头 `dropdown_arrow`。
|
||
- 展开列表复用列表项样式(见 5.8)。切图 `dropdown_bg`。
|
||
|
||
### 5.5 数值步进器 (Stepper)
|
||
|
||
- 形式:`[ − ] 数值 [ + ]`,减号红圆按钮、加号绿圆按钮,中间数值居中。
|
||
- 复用 `ico_minus`/`ico_plus` 圆形按钮 + 输入/显示框。
|
||
|
||
### 5.6 进度条 (Progress)
|
||
|
||
- 内凹深色底槽 + 高光亮色填充(绿/蓝/橙),全圆端胶囊形。
|
||
- 左端可挂圆形图标徽章,填充上叠加数值文本(如 `350/500`、`80%`),文本白色加轻描边。
|
||
- 切图:`progress_bg` + `progress_fill_*`,填充用 **Filled 或 Sliced**;脚本驱动时按 `sizeDelta.x` 或 `fillAmount` 改变。
|
||
|
||
### 5.7 滑动条 (Slider)
|
||
|
||
- 内凹轨道 + 亮色已填充段 + 圆形拖拽手柄(白/蓝带高光)。
|
||
- 左侧图标说明(音量/音乐/亮度),右侧显示百分比。
|
||
- 切图:`slider_track` / `slider_fill` / `slider_handle`。
|
||
|
||
### 5.8 滚动列表与滚动条 (ScrollView / Scrollbar)
|
||
|
||
- 列表项:奶油米圆角卡片,左图标 + 主标题 + 次要描述 + 右侧 chevron 箭头。
|
||
- 列表项状态:普通 `ui_list_item_normal`、选中 `ui_list_item_selected`、禁用 `ui_list_item_disabled`(均九宫格)。
|
||
- 滚动条:内凹轨道 `scrollbar_track_*` + 亮蓝滑块 `scrollbar_thumb_*`,全圆端。
|
||
- 内容用 `VerticalLayoutGroup` + `ContentSizeFitter`,视口用 `RectMask2D` 裁剪。
|
||
|
||
### 5.9 开关 / 勾选 / 单选 (Toggle / Checkbox / Radio)
|
||
|
||
- 开关:胶囊轨道(开=绿 `toggle_bg_on` / 关=灰 `toggle_bg_off`)+ 白色圆形滑块 `toggle_knob`,配 开/关 文案。
|
||
- 复选框:`checkbox_off` / `checkbox_on`(圆角方形 + 对勾);单选:`radio_off` / `radio_on`(圆形 + 实心点)。
|
||
|
||
### 5.10 页签 (Tab)
|
||
|
||
- 选中态高亮(蓝)凸起 `tab_active`,未选中态浅色下沉 `tab_inactive`;选中页签与内容区无缝相连。
|
||
- 分段控件用 `seg_left` / `seg_mid` / `seg_right` 拼接。
|
||
|
||
### 5.11 角标 / 徽章 (Badge)
|
||
|
||
- 图标按钮右上角红色圆形数字角标(未读/数量),切图 `ui_badge_alert`(红点/提醒)、`ui_badge_base`(普通)。
|
||
- 角标数字白色加粗;红点用于“有更新”无数字场景。
|
||
|
||
### 5.12 业务图标 (Icon)
|
||
|
||
- 拟物卡通 + 统一深色描边 + 高光;尺寸基准 64×64,重要图标可放大。
|
||
- 常用:货币 `ico_coin`、钻石 `ico_diamond`、生命 `ico_heart`、能量、星级 `ico_star`、防具 `ico_shield`、武器 `ico_sword`、背包 `ico_bag`、地图 `ico_map`、钥匙 `ico_key`、设置 `ico_settings` 等。
|
||
- 图标槽/道具格用 `slot_empty` / `slot_selected` / `slot_locked`(九宫格)。
|
||
|
||
### 5.13 资源/货币条 (Currency)
|
||
|
||
- 形式:圆形货币图标 + 数值(金黄高亮)+ 末尾绿色加号按钮(前往充值/获取)。
|
||
- 数值用千分位,居中垂直对齐图标。
|
||
|
||
### 5.14 头像 / 玩家卡 (Avatar)
|
||
|
||
- 圆形头像框 `avatar_frame` + 等级角标 + 昵称 + 经验进度条(如 `870/1500`)。
|
||
|
||
### 5.15 底部导航 (Bottom Nav)
|
||
|
||
- 一排图标按钮(首页/背包/任务/商店/设置),当前页高亮(凸起蓝底 + 图标点亮),其余浅色。
|
||
- 当前项放大并加底色块区分。
|
||
|
||
---
|
||
|
||
## 6. 状态与反馈
|
||
|
||
每个可交互控件至少定义以下状态,保证“可点、已选、不可点”一目了然:
|
||
|
||
| 状态 | 表现 |
|
||
| --- | --- |
|
||
| Normal | 默认色 + 高光 + 描边 |
|
||
| Highlighted/Hover | 整体提亮(更亮/更饱和) |
|
||
| Pressed | 加深 + 下沉,高光减弱 |
|
||
| Disabled | 去饱和转灰 + 降透明,无高光 |
|
||
| Selected/Active | 选中色描边或染色(亮绿 `#9EEB3B`),或凸起 |
|
||
|
||
- 按钮优先用 **SpriteSwap**(不同状态用不同切图);无专用切图时退化为 ColorTint。
|
||
- 选中反馈可叠加:背景换图 + 文字变色/加粗(如列表当前项)。
|
||
- 关键操作(确定/危险)给与即时视觉与(可选)音效反馈。
|
||
|
||
---
|
||
|
||
## 7. 与 Unity 实现的衔接
|
||
|
||
- 控件优先复用 `Assets/Game/Art/UI/Texture/Common` 通用切图;缺图时用 gptimage2 按本风格生成到该目录(见 `UnityProject.md` 第 6 条)。
|
||
- 新界面按 **JSON→Prefab 管线**:在 `Doc/UIPrefabCreater/` 写界面描述 JSON,Unity 自动生成 Prefab(`UnityProject.md` 第 26–46 条)。
|
||
- 文本控件统一 TextMeshPro;按钮 `transition` 优先 `SpriteSwap`;九宫格图片声明 `"imageType": "Sliced"`,进度填充可用 `"Filled"`。
|
||
- 按钮 SpriteSwap 状态对应切图:`*_normal`(Target) / `*_hover`(Highlighted) / `*_pressed`(Pressed) / `*_disabled`(Disabled)。
|
||
|
||
---
|
||
|
||
## 8. 九宫格与间距
|
||
|
||
- **九宫格 (Sliced)**:所有可拉伸容器(面板、按钮、输入框、进度条、列表项等)必须设置正确的 `Border`,保证圆角与描边在任意尺寸下不变形;`Border` 值参考 `Doc/UI_Pic_Set.md` 各切片。
|
||
- 导入设置:Texture Type = `Sprite (2D and UI)`,勾选 `Alpha Is Transparency`,Mesh Type = `Full Rect`,Filter = Bilinear。
|
||
- **间距节奏**:统一使用 8 的倍数(8 / 16 / 24 / 32)。控件内边距≥16,区块间距≥24,安全区四周≥24。
|
||
- 切图四周保留约 2px 透明边,避免双线性采样串色(项目切图已统一处理)。
|
||
|
||
---
|
||
|
||
## 9. 分辨率与适配
|
||
|
||
- 设计分辨率 **2048×1024**(`CanvasScaler` = ScaleWithScreenSize,referenceResolution `[2048,1024]`,Match = 0.5)。
|
||
- 布局以锚点为主:全屏元素用拉伸锚点;角标/悬浮按钮锚到对应屏幕角;主面板居中。
|
||
- 关键信息放安全区内,避免刘海/圆角遮挡;考虑长宽比从 4:3 到 20:9 的适配。
|
||
- 重要图标与文字用 `None`/`High Quality` 压缩,避免边缘与文字出现压缩噪点。
|
||
|
||
---
|
||
|
||
## 10. 设计检查清单(提交前自检)
|
||
|
||
- [ ] 配色取自第 2 节调色板,语义色使用正确(绿=主/蓝=次/橙=强调/红=危险)。
|
||
- [ ] 控件有圆角 + 描边 + 高光 + 柔和阴影,风格与 `ui_design.jpg` 一致。
|
||
- [ ] 可交互控件具备 Normal/Hover/Pressed/Disabled(必要时 Selected)状态。
|
||
- [ ] 文字用 TMP;浅色字在复杂/高饱和/深底上加了深蓝灰描边;深浅对比充足。
|
||
- [ ] 可拉伸控件设置了正确的九宫格 Border,任意尺寸不变形。
|
||
- [ ] 间距为 8 的倍数;点击热区足够大。
|
||
- [ ] referenceResolution = [2048,1024],锚点适配多分辨率。
|
||
- [ ] 复用 Common 通用切图;新图按本风格用 gptimage2 生成到对应目录。
|