docs: 修正进度系统文档中虚构的技能树系统

将 10_Manual_ProgressionSystem.md 中不存在的 SkillTreeSO/技能点/技能树解锁
流程,改写为真实实现:技能(FormSkillSO)随形态由 FormController 注入 SkillManager,
施放消耗魂力/灵力;能力通过 AbilityType 位掩码解锁(PlayerStats/AbilityFlags)。
同步更正 MT-PROG-06 的 HasAbility/存档字段引用,并统一 05/07/11 文档措辞为
'形态技能一览(FormSkillPanel)',明确本项目无技能树。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-07 11:39:57 +08:00
parent d794b83ebe
commit 9aaa2b6452
4 changed files with 190 additions and 55 deletions

View File

@@ -379,13 +379,15 @@ public class PauseMenuController : MonoBehaviour, IFocusable
## 10. 扩展指南
### 添加新的游戏内面板(如技能树
### 添加新的游戏内面板(以图鉴 Codex 为例
1.`Assets/_Game/Scenes/Persistent.unity``UIRoot` 下新建 `SkillTreeRoot`,初始 `SetActive(false)`
2.`PanelId` 枚举中添加 `SkillTree`
3.`UIManager._panels` 数组中注册:`PanelId.SkillTree → SkillTreeRoot`
4. 创建 `EVT_SkillTreeOpen`VoidEventChannelSO并在 `UIManager.OnEnable` 中订阅 `_onSkillTreeOpen → () => OpenPanel(PanelId.SkillTree)`
5.`InputReader` 中添加 `SkillTree` 输入动作,触发时 Raise `EVT_SkillTreeOpen`
> 说明:本项目**没有技能树**,技能随形态绑定(见 `FormSkillPanel` 与 `09_ProgressionModule`)。下方以一个假想的"图鉴面板"演示通用接入流程
1.`Assets/_Game/Scenes/Persistent.unity``UIRoot` 下新建 `CodexRoot`,初始 `SetActive(false)`
2. `PanelId` 枚举中添加 `Codex`
3.`UIManager._panels` 数组中注册:`PanelId.Codex → CodexRoot`
4. 创建 `EVT_CodexOpen`VoidEventChannelSO并在 `UIManager.OnEnable` 中订阅 `_onCodexOpen → () => OpenPanel(PanelId.Codex)`
5.`InputReader` 中添加 `Codex` 输入动作,触发时 Raise `EVT_CodexOpen`
### 使用 Addressable 按需加载大型面板

View File

@@ -0,0 +1,117 @@
# 07 · UI 编辑指南(面向策划 / 美术)
> 目的:不写代码,在 Unity 里改 UI 的**样式**和**内容**,并让**按键提示自动适配输入设备**。
> 工程架构细节见 `05_UISystem_Architecture_Guide.md`,本篇只讲「怎么改」。
---
## 0. 一句话心智模型
每个 UI 由四层组成,各自有独立的编辑入口,**互不影响**
| 层 | 改什么 | 在哪改 | 谁负责 |
|----|--------|--------|--------|
| **Prefab预制件** | 样式 / 布局 / 图片 / 字体 / 装饰 | 双击预制件进 **Prefab Mode** | 美术 |
| **Config配置 SO** | 数据:条目 / 文案 key / 参数 | 选中 `.asset`**Inspector** | 策划 |
| **Theme主题** | 全局配色 / 字体令牌 | `UI_Theme_Default.asset` | 美术 |
| **Localization本地化** | 文案译文 | 表格编辑器(菜单 `BaseGames/Localization/` | 策划 |
原则:**样式进 Prefab、数据进 Config、配色进 Theme、文案进本地化表**。改任意一层都所见即所得,不用动代码。
---
## 1. 已数据驱动的 UI直接照下表改
| UI | 改样式Prefab | 配数据Config 资产) |
|----|------------------|------------------------|
| 主菜单 | `Prefabs/UI/Controls/UI_MainMenu_Button.prefab` | `Data/UI/UI_MainMenuConfig.asset`(增删/重排菜单项、标签 key、图标、动作 |
| 设置面板 | `Prefabs/UI/Controls/UI_SettingsPanel.prefab` + `UI_Setting_*Row.prefab` | `Data/UI/UI_SettingsSchema.asset`(增删/重排设置项、分节) |
| 加载界面 | `Prefabs/UI/UI_LoadingScreen.prefab` | `Data/UI/UI_LoadingConfig.asset`(提示文案 key、标题 key、加载时长/手感) |
| 对话 | 对话面板预制件 | `DialogueSequenceSO` / `DialogueDataSO` 资产 |
> 例:想给主菜单加一个「成就」按钮 → 选 `UI_MainMenuConfig.asset`,在 Inspector 的 Items 里加一项,填 labelKey/动作即可,**不用碰场景和代码**。
---
## 2. 改样式美术Prefab Mode
1. 在 Project 窗口双击预制件(如 `UI_LoadingScreen.prefab`)→ 进入 Prefab Mode。
2. 自由操作:替换 `Image` 的 Sprite、调颜色/字体/字号、移动/缩放、加装饰节点logo、光效、spinner、边框
3. 退出 Prefab Mode 即保存 → **所有用到该预制件的地方全局生效**
注意:
- 节点上若挂了 **`UIThemeRole`**(如 `Graphic_Accent` / `Text_Header`),其颜色由主题统一控制;想让它用固定色,去掉该组件或直接在主题里调。
- 进度条填充:`ProgressBarFill` 的 Image 必须是 `Filled` / `Horizontal`(已配好,换 Sprite 即可)。
- 随机背景:在加载预制件里复制多个 `Background` 子物体(各配不同图),接到 `LoadingScreenManager._backgroundArts` 数组 → 运行时随机选一张。
---
## 3. 配数据 / 文案(策划)
- **数据**:选中对应 Config `.asset`,在 Inspector 改数组/参数。
- **文案**UI 上显示的文字走**本地化 key**(不是直接写中文)。
1. 在 Config 里填 key`LOADING_TITLE``MENU_NEW_GAME`)。
2. 用菜单 `BaseGames/Localization/表格编辑器` 给该 key 填中/英译文。
3. 缺译文时界面会显示 key 原文,便于发现遗漏。
---
## 4. 输入设备适配(按键提示,零代码)
系统已内置:会自动识别**当前设备**(键鼠 / PlayStation / Xbox / Switch并随设备切换 / 改键自动换图标。
### 加一个「按键提示」到任意 UI
1. 选中目标 Canvas/节点 → 菜单 **`BaseGames/UI/控件库/向选中节点放置 ▸ InputPrompt`**。
2. 选中放进来的 `UI_Control_InputPrompt` → 在 `Icon`**InputIconImage** 组件填 **ActionName**(如 `Interact`/`Jump`/`Attack`,对应输入表里的 Action
3.`Label` 填提示文字(可挂 `LocalizedText` 走本地化)。
4. 完成 —— 运行时图标会显示**当前设备**对应的那颗按键,玩家切手柄/改键自动更新。
> 没有预制件?先跑菜单 `BaseGames/UI/控件库/生成输入提示控件UI_Control_InputPrompt`。
### ⚠️ 美术必做:填按键图标
图标系统代码已就绪,但**图标 sprite 还没填**。在这些资产里把每个按键路径对应的图片拖进去:
- `Data/UI/InputIcons/ICN_Keyboard.asset`(已列 32 个按键路径,逐个填 Icon
- `Data/UI/InputIcons/ICN_Xbox.asset` / `ICN_PlayStation.asset` / `ICN_Switch.asset`(需先按需补按键路径条目再填图)
每条 = `BindingPath`(如 `<Gamepad>/buttonSouth`)→ `Icon`sprite。填完后所有 InputPrompt / 交互提示自动显示。**没填图时图标会自动隐藏,不会报错或显示错图。**
---
## 5. 改全局配色美术Theme
`Data/UI/Themes/UI_Theme_Default.asset`,在 Inspector 调色板 / 字体令牌 → 所有挂了 `UIThemeRole` 的元素(背景/强调/标题/正文等)全局套用。想要多套皮肤可另存为多个主题资产切换。
---
## 6. 做一个全新 UI不重复开发
优先用脚手架菜单生成「预制件 + 配置」,而不是裸搭:
| 菜单(`BaseGames/UI/控件库/` | 产出 |
|------|------|
| 生成或更新控件预制件 | Button/SelectableRow/Slider/Dropdown/Panel/TabBar 通用控件 |
| 生成设置面板(行预制件 + 默认表 + 面板) | 设置面板整套 |
| 生成主菜单(按钮预制件 + 默认表) | 主菜单整套 |
| 生成加载界面(预制件 + 默认配置) | 加载界面整套 |
| 生成输入提示控件 / 向选中节点放置 ▸ InputPrompt | 设备自适应按键提示 |
| 向选中节点放置 ▸ Button / Panel / ... | 把通用控件拖进选中 Canvas |
新面板:继承 `UIPanelBase`(统一生命周期 / 焦点 / 淡入 / 手柄导航),用上面的控件预制件拼,数据走一个新的 Config SO仿 `MainMenuConfigSO` 写法)。这样**新 UI = 配 Prefab + 填 Config**,无需每次重写交互/导航/设备适配代码。
---
## 7. 手柄 / 焦点(已内置,无需配置)
- 方向键 / 摇杆导航、确认/取消由 `EventSystem` + `InputSystemUIInputModule` 统一处理。
- 焦点恢复(点空白不丢高亮)由 `UISelectionRestorer`(挂在 Persistent 的 EventSystem负责。
- 面板栈、ESC 逐层返回、Modal 屏蔽下层由 `UINavigator` 负责。
- 你只需保证新面板有一个默认选中项(`UIPanelBase._firstSelected` 或重写 `ResolveFirstSelected()`)。
---
## 8. 现状与待办(迁移进度)
- **已通用(照本指南直接改)**:主菜单、设置、加载、对话。
- **半通用**(有预制件可改样式,但调参仍在脚本 Inspector正逐屏补 Config SOHUD、Boss 血条、确认框、存档槽、死亡屏、Splash、背包/护符/任务、地图、商店。
- **待升级为数据驱动**:暂停菜单、新游戏难度选择、形态技能一览(`FormSkillPanel`,只读展示,非技能树)。
> 这些会按路线图逐屏迁到「Prefab + Config」。迁移完成后本表会更新在此之前半通用屏的样式仍可在各自预制件里改调参在对应控制器的 Inspector 改。