Files
zeling_v2/Docs/Verification/11_Manual_UIAudioVFX.md
Joywayer 9aaa2b6452 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>
2026-06-07 11:39:57 +08:00

14 KiB
Raw Blame History

手动测试 11 · UI、音频与特效系统

测试类型Unity Editor 手动测试Play Mode
覆盖模块BaseGames.UIBaseGames.AudioBaseGames.VFXBaseGames.FeedbackBaseGames.Localization
依赖组件HUDControllerAudioManagerVFXCatalogSOMMF_PlayerFeelLocalizationManager
场景要求:含完整 HUD Canvas、AudioMixerFeel 的 MMF_Player 绑定到角色


快速工具

工具 用途 菜单路径
Validate All ScriptableObjects 遍历所有实现 IValidatable 的 SO输出 / 报告(含 HUDController 频道字段、VFXCatalogSO 等) BaseGames → Tools → Validate All ScriptableObjects

注意PlayModeDebugOverlay 已移除。HUD 变化测试请通过 Inspector 直接修改对应 Manager 字段HP、Geo 等),或配置带伤害的敌人触发真实战斗流程。
Tab 11 的 Validate HUD Bindings、Ensure AudioMixer、Validate VFX Catalog 等独立检查已合并到 Validate All ScriptableObjects,如需单独检查各 SO 字段请在 Console 过滤对应日志。

典型工作流

  1. 测试前:BaseGames → Tools → Validate All ScriptableObjects 确认 HUD 频道全部绑定、VFX Catalog 无空引用AudioMixer 检查参照下方 MT-UI-03 手动步骤。
  2. MT-UI-01 HUD 绑定Inspector 中直接修改 PlayerStats._hp 字段,观察 HP 条平滑动画。
  3. MT-UI-04 VFX配置带燃烧效果的敌人攻击玩家Scene 视图观察 VFX Prefab 实例化。
  4. MT-UI-05 Feel 反馈:配置敌人打玩家触发受击,观察 Camera Shake 和 Chromatic Aberration。

目录

  1. HUD 与 UI 前置检查
  2. MT-UI-01HUD 实时数据绑定
  3. MT-UI-02UI 面板管理PanelManager
  4. MT-UI-03AudioManager 混音器快照
  5. MT-UI-04VFX 目录VFXCatalogSO
  6. MT-UI-05Feel 反馈链MMF_Player
  7. MT-UI-06本地化Localization
  8. MT-UI-07对话系统DialogueSystem

1. HUD 与 UI 前置检查

元素 说明
HUDController Canvas 下有 HUDController.cs,绑定 HP/MP/Geo/Spring 事件频道
AudioMixer Assets/Settings/MainMixer.mixer 已创建,含 Master/Music/SFX/UI 子轨道
VFXCatalogSO Assets/Data/VFX/VFXCatalog.asset 已配置并引用正确 VFX Prefab
Feel MMF_Player 角色 Prefab 上 PlayerFeedbacks 组件已绑定

🔧 前置资产创建指导

① HUD Canvas 创建(若尚无 Canvas

  1. Hierarchy 右键 → UI → Canvas,命名 HUD_Canvas

  2. HUD_Canvas 下添加 HUDController 组件

  3. 运行 BaseGames → Tools → Validate All ScriptableObjects,根据 Console 提示,将以下频道 SO 拖入对应字段:

    • _onHPChangedEVT_HPChangedIntEventChannelSO
    • _onMaxHPChangedEVT_MaxHPChangedIntEventChannelSO
    • _onSoulPowerChangedEVT_SoulPowerChangedIntEventChannelSO
    • _onSpiritPowerChangedEVT_SpiritPowerChangedIntEventChannelSO
    • _onGeoChangedEVT_GeoChangedIntEventChannelSO
    • _onSpringChargesChangedEVT_SpringChargesChangedIntEventChannelSO

    若 SO 资产不存在,先运行菜单 BaseGames → Tools → Create Event Channel Assets 生成全部频道资产

② AudioMixer 创建(无法脚本化,仅可手动)

  1. Project 右键 → Create → Audio Mixer → 命名 MainMixer → 保存到 Assets/_Game/Settings/
  2. 在 Mixer 窗口Window → Audio → Audio Mixer中选中 Master,点 + 按钮创建三个子组 MusicSFXUI
  3. MainMixer 资产拖入 AudioManager._mixer 字段

③ VFXCatalogSO 条目填写

  1. 运行 BaseGames → Tools → Validate All ScriptableObjects 查看空引用条目
  2. 在 Project 视图找到 VFXCatalog.asset,展开 _entries 数组,将制作好的 VFX Prefab 拖入每条的 prefab 字段
  3. ⚠ VFX Prefab 本身需手动制作ParticleSystem无法自动生成

MT-UI-01HUD 实时数据绑定

目的:验证 HP/MP/Geo/灵泉 HUD 元素实时响应游戏状态变化。

🔧 资源准备(驱动 HUD 数据变化)

进入 Play Mode 后,通过 Inspector 直接修改 PlayerStats._hp / _geo 等字段,观察对应 HUD 元素响应:

  • HP 变化 — 修改 PlayerStats._hp,观察 HP 条减少 / 恢复动效
  • Geo 变化 — 修改 PlayerStats._geo,观察 Geo 数字滚动
  • 灵泉变化 — 修改 PlayerStats._springCharges,观察图标变化

也可配置带伤害的敌人触发真实战斗流程。

步骤

HP 条

  1. 让玩家受到攻击HP 减少)

预期

  • HP 条动画更新(平滑或直接减少,取决于设计)
  • HP 条颜色/动效响应HP 低时变红或闪烁)

MP灵力

  1. 玩家释放技能消耗 MP

预期MP 条立即减少;停止使用后 MP 逐步恢复(如有恢复机制)。

Geo 计数器

  1. 拾取 Geo 或购买物品

预期Geo 数字动画更新(计数滚动动效)。

灵泉图标

  1. 使用治疗(灵泉 -1

预期:灵泉图标减少一个(图标变暗或消失)。

检查点 期望
HP 实时响应 受击后 HP 条即时更新
MP 实时响应 技能使用后 MP 条即时更新
Geo 数字更新 拾取/消费后 Geo 即时更新
灵泉图标 使用后图标减少
无 UI 错误 Console 无 UI Null 或 Missing Reference

MT-UI-02UI 面板管理PanelManager

目的:验证多个 UI 面板(形态技能一览/装备/任务/暂停)的互斥打开和关闭逻辑。

步骤

  1. 按形态技能一览快捷键P打开 FormSkillPanel

预期:形态技能一览面板打开,游戏暂停(Time.timeScale = 0)。

  1. 按装备快捷键Tab在形态技能一览面板开启的情况下

预期:形态技能一览关闭,装备面板打开(面板互斥,不同时显示多个菜单面板)。

  1. 按 ESC 键

预期:当前打开的任意面板关闭,游戏恢复(Time.timeScale = 1)。

  1. 打开暂停菜单ESC 键)

预期:暂停菜单显示,EVT_GamePaused 事件触发,其他 UI 面板不显示。

检查点 期望
面板互斥 同时只有一个主面板开启
ESC 关闭面板 ESC 关闭当前面板
暂停时 timeScale=0 面板打开时游戏暂停
关闭后 timeScale=1 面板关闭后游戏恢复

MT-UI-03AudioManager 混音器快照

目的:验证 AudioManager 在不同 GameState 下切换 AudioMixer 快照,正确控制音量。

🔧 资源准备AudioMixer 必须手动创建)

  1. 手动创建步骤
    • Project 右键 → Create → Audio Mixer → 命名 MainMixer → 保存到 Assets/_Game/Settings/
    • 打开 Window → Audio → Audio Mixer
    • 选中 Master 轨道,点 + 添加子组:MusicSFXUI
    • 展开 Snapshots+ 添加:GameplayPauseBossFight(用于快照切换测试)
    • Gameplay 设为默认快照(右键 → Set as Start Snapshot
  2. MainMixer 拖入场景 AudioManager._mixer 字段
  3. ⚠ Unity 不支持通过代码创建 AudioMixer 资产Editor API 无此功能),必须手动完成

步骤

步骤 A游戏运行快照

  1. 正常 Gameplay 状态下,观察 Window → Audio → AudioMixer

预期Master 轨道均衡,Gameplay 快照激活BGM 正常播放。

步骤 B暂停快照

  1. 按 ESC 打开暂停菜单

预期

  • Pause 快照切换BGM 音量降低或混响增强)
  • SFX 暂停或降低音量
  • 暂停菜单 BGM 或静音正确切换

步骤 CBoss 战快照

  1. 进入 Boss 战触发区域

预期

  • BossFight 快照激活
  • Boss 战 BGM 淡入
  • 普通 BGM 淡出

步骤 D音量设置持久化

  1. 打开设置菜单,调整 BGM 音量
  2. 关闭游戏(退出 Play Mode并重新进入

预期BGM 音量设置被保存(PlayerPrefsSaveData.Settings.BGMVolume)。

检查点 期望
Gameplay BGM 正常播放,音量正常
暂停快照 BGM 降低/混响变化
Boss BGM Boss 战 BGM 正确切换
音量持久化 重进后音量设置保留

MT-UI-04VFX 目录VFXCatalogSO

目的:验证 VFXCatalogSO 在各种触发条件下正确播放对应 VFX Prefab通过对象池

🔧 资源准备VFXCatalogSO 条目填写)

  1. 运行 BaseGames → Tools → Validate All ScriptableObjectsConsole 显示空引用条目
  2. 找到 VFXCatalog.asset(自定义路径),在 Inspector 展开 _entries
  3. 为每个条目填入对应的 VFX PrefabParticleSystem GameObject
Key示例 用途 Prefab 路径(示例)
hit_slash 斩击命中 Assets/_Game/VFX/Hit_Slash.prefab
hit_blunt 钝击命中 Assets/_Game/VFX/Hit_Blunt.prefab
parry_ring 弹反 Assets/_Game/VFX/Parry_Ring.prefab
player_hurt 玩家受击 Assets/_Game/VFX/Player_Hurt.prefab
player_death 玩家死亡 Assets/_Game/VFX/Player_Death.prefab
heal_spring 灵泉治疗 Assets/_Game/VFX/Heal_Spring.prefab
plunge_land 下劈落地 Assets/_Game/VFX/Plunge_Land.prefab

⚠ VFX Prefab 需手动制作ParticleSystem + 自定义 Shader无法自动生成。若当前测试阶段 Prefab 未就绪,可将占位 Cube/Sphere 临时拖入以验证调用链正常。

触发点验证列表

执行以下动作,观察对应 VFX 是否播放:

触发动作 预期 VFX
玩家攻击命中敌人(斩击) 击中溅血特效slash hit
玩家攻击命中敌人(钝击) 击中火花/尘土特效blunt hit
弹反成功 弹反光圈特效parry ring
玩家受击 受击白闪 + 短暂粒子
玩家死亡 死亡消散特效
灵泉治疗 治疗绿色粒子
下劈反弹 落点尘土爆炸

对象池验证

  1. 在 Hierarchy 中找到 VFXPoolRoot(或 ObjectPool GameObject
  2. 执行大量攻击,观察 Hierarchy 的 VFX Pool 子对象

预期VFX 对象被复用(SetActive(false) 后再 SetActive(true)),不会无限创建新对象。

检查点 期望
各 VFX 正确播放 对应触发点显示正确特效
对象池复用 不重复创建新 GameObject

MT-UI-05Feel 反馈链MMF_Player

目的:验证 MMF_PlayerMoreMountains Feel相机抖动、控制器震动、屏幕冲击等反馈。

步骤

相机抖动Camera Shake

  1. 执行强力攻击(如下劈落地、受到 Boss 重击)

预期:相机产生震动效果(CinemachineImpulseSourceMMWiggle 驱动),震动强度与事件大小相符。

控制器震动Controller Vibration(如在 Windows 上使用 Xbox 手柄):

  1. 受到攻击

预期:手柄发生震动(MMNVibrateNiceVibrations 调用)。

屏幕闪烁Screen Flash

  1. 使用爆炸性技能或受到大伤害

预期:屏幕短暂白色或红色闪烁(PostProcessingImage Overlay

检查点 期望
相机抖动 重攻击/落地时相机抖动
控制器震动 受击时手柄震动(手柄测试)
屏幕闪烁 大伤害时屏幕闪烁

MT-UI-06本地化Localization

目的:验证 LocalizationManager 切换语言后 UI 文本正确更新。

步骤

  1. 在游戏设置中切换语言(如:中文 → 英文)

预期

  • HUD 中的提示文本变为英文
  • 对话框文本变为英文
  • 技能/物品名称变为英文
  1. 再切换回中文

预期:所有文本恢复中文,无残留英文。

  1. 观察是否存在文本溢出UI 元素装不下翻译后更长的字符串)

预期UI 文本框自适应或截断处理正确,无文字超出边界。

检查点 期望
语言切换 UI 文本全部更新
切换回中文 无残留英文
文本不溢出 UI 无字符超出边界
缺失 Key 检测 Console 无 Missing Localization Key 警告

MT-UI-07对话系统DialogueSystem

目的:验证 DialogueManager 与 NPC 对话的触发、分支选择、事件链。

步骤

  1. 走到场景中有对话触发的 NPC交互键E

预期

  • 对话 UI 面板打开
  • 第一行对话文本正确显示(逐字显示动效)
  • 游戏输入暂时切换为"对话输入"(按键 E/Space 翻页WASD 选择选项)
  1. 按 E/Space 翻页

预期:逐行显示对话,直到当前节点末尾。

  1. 遇到分支选项时(如"同意/拒绝"

预期

  • 分支选项 UI 显示
  • 上下移动光标选择
  • 按确认键执行对应分支逻辑
  1. 对话结束后

预期

  • 对话 UI 关闭
  • 游戏输入恢复正常
  • 若对话触发任务/事件:相关 EventChannel 已触发EventBusMonitor 可见)
检查点 期望
对话 UI 打开 交互后对话面板显示
逐字显示 文字逐字出现动效
分支选择 分支选项响应方向键
对话结束 UI 关闭,输入恢复
事件触发 对话触发的事件正确执行