多轮审查和修复

This commit is contained in:
2026-05-12 15:34:08 +08:00
parent f55d2a57c3
commit ebbbb7332e
805 changed files with 838724 additions and 1905 deletions

View File

@@ -1,7 +1,7 @@
# 开发实施计划
> **版本**1.0
> **日期**2026-04-29
> **日期**2026-05-11
> **依据**`Docs/Architecture/`24 份架构文档)
> **目标**:完整实现 `Docs/Design/` 所有技术需求
@@ -60,9 +60,9 @@ Phase 4: 内容与完善Boss 技能、叙事、支撑系统、平台发布)
|-------|------|--------|---------|------|
| **0** | 项目基础设施 | 编译无错,基础框架可寻址加载 | 1 周 | ✅ 完成2026-05-07|
| **1** | 垂直切片 MVP | 一个房间可玩:移动/攻击/一只敌人/存读档 | 34 周 | ✅ 完成2026-05-08|
| **2** | 核心玩法扩展 | 完整玩家能力树/战斗系统/多种敌人 | 45 周 | |
| **3** | 世界与进程 | 完整地图/谜题/任务/商店 | 45 周 | |
| **4** | 内容与完善 | Boss/叙事/平台服务/QA | 34 周 | |
| **2** | 核心玩法扩展 | 完整玩家能力树/战斗系统/多种敌人 | 45 周 | 🔄 代码全部完成剩余VFX 资产填充 - 仅 Unity 编辑器操作)|
| **3** | 世界与进程 | 完整地图/谜题/任务/商店 | 45 周 | ✅ 代码全部完成剩余P3-1 Prefab 装配 - 仅 Unity 编辑器操作)|
| **4** | 内容与完善 | Boss/叙事/平台服务/QA | 34 周 | ✅ 完成2026-05-11P4-1P4-6 全部 ✅)|
---
@@ -237,67 +237,88 @@ Phase 4: 内容与完善Boss 技能、叙事、支撑系统、平台发布)
### 任务清单
#### P2-1玩家完整 FSM05_PlayerModule 剩余)
- [ ] State 补充:`DashState``HurtState``DeadState``WallSlideState``WallJumpState``SwimState``21_LiquidPuzzleModule §SwimState`
- [ ] `FormController`三形态切换Normal/Soul/Spirit
- [ ] `WeaponManager``EquipAsync` 异步装备Socket 管理
- [ ] `SkillManager`(技能槽 + 冷却计时)
- [ ] `SpringSystem`(头部弹簧摆动
- [ ] Animancer 双层动画Base Layer移动动画+ Additive Layer攻击动画
- [x] State 补充Week 5`DashState``AerialDashState``WallSlideState``WallJumpState``AirAttackState``DownAttackState``UpAttackState``HurtState``DeadState``SpringState``ParryState`
- [x] `SwimState``21_LiquidPuzzleModule §SwimState`,✅ Week 11 完成
- [x] `PlayerWallDetector`(独立墙壁检测组件,双射线每侧防误判
- [x] `PlayerMovementConfigSO` 补充 `DefaultGravityScale`
- [x] `FormController`三形态切换Sky/Earth/Death`FormType``FormSO``FormConfigSO`
- [x] `WeaponManager`FormController 联动 + Override 护符替换 API`WeaponSO` 完整字段扩展
- [x] `PlayerCombat` 完整实现HitBox 四向激活、`SetComboSegmentSource``OnHitConfirmed`→灵力)
- [x] `PlayerController` Phase 2 扩展(`IPoiseSource` + 11 个新状态 + `TakeDamage` 路由到 HurtState/DeadState
- [x] `SkillManager`(技能槽 + 冷却计时)— 已在 P3-3 完整实现(`BaseGames.Skills` 程序集)
- [x] `SpringSystem`(头部弹簧摆动,完整实现)
- [x] Animancer 双层动画Base Layer移动动画+ Overlay Layer叠加层灵泉/魂技能)✅ 2026-05-12`PlayerController` 初始化 Layer 1`PlayOnOverlay`/`StopOverlay` API`SpringState` 改用叠加层)
#### P2-2护盾系统20_ShieldModule
- [x] `ShieldComponent`Phase 1 存根AbsorbDamage 全量穿透Phase 2 补完护盾值/再生/破盾事件
- [ ] `ShieldConfigSO`MaxShieldHP、AbsorptionRatio、RechargeDelay、RechargeRate
- [x] `ShieldComponent`Phase 2 完整实现:护盾值吸收、再生延迟、破盾惩罚事件;新增 `FullRecharge()` / `OnParrySuccess()` / 破碎惩罚计时;可选 `ShieldConfigSO` 覆盖内联字段
- [x] `ShieldConfigSO`MaxShieldHP、DamageAbsorptionRatio、RechargeDelay、RechargeRate、BrokenPenaltyDuration、ParryRestoreRatio
- [x] `IShieldable` 接口(`CombatInterfaces.cs`
- [ ] `HurtBox.ReceiveDamage` 接入护盾管道(HurtBox → ShieldComponent → IDamageable
- [ ] 护盾破碎/恢复 VFX 钩子
- [x] `HurtBox.ReceiveDamage` 接入护盾管道(步骤 4 `AbsorbDamage` 已实现ConsumeParry 步骤 2 已实现
- [x] 护盾破碎/恢复 VFX 钩子 ✅ 2026-05-13`ShieldComponent` 新增 `_onShieldBrokenChannel` / `_onShieldRestoredChannel` VoidEventChannelSO 字段,破碎时 Raise破碎惩罚结束及 FullRecharge 时 Raise restore
#### P2-3完整战斗系统06_CombatModule 剩余)
- [ ] `ProjectileConfigSO` + `LinearProjectile` + `ParryableProjectile`
- [ ] `ParrySystem`(弹反窗口、弹反成功/失败事件+ `ParryConfigSO`
- [ ] `StatusEffectManager` + `StatusEffect`(抽象基类,架构 06_CombatModule §11`StatusEffectBase`+ 具体效果Poison、Burn、Freeze、Stun
- [ ] `PoiseSystem`霸体计数、Break 阈值
- [ ] `IBreakable`(机关/障碍物交互接口)
- [ ] `ClashResolver`(拼刀系统:同帧玩家/敌人 HitBox 对碰检测,广播 `EVT_NailClash`;架构 06 §15
- [x] `ProjectileConfigSO` + `LinearProjectile` + `ParryableProjectile`+ `ArcProjectile``HomingProjectile``ProjectileManager`
- [x] `ParrySystem` 5 阶段状态机Inactive/Startup/Active/EndLag/CounterWindow+ 完美弹反子弹时间 + C# 事件 + `ParryConfigSO`(全部 12 个字段)
- [x] `ParryInfo` struct + `ParryInfoEventChannelSO`SO 事件频道,`BaseGames.Parry` 程序集
- [x] `PoiseWindowConfig` struct`[Serializable]`,描述动画时间段霸体等级)+ `EnemyPoiseComponent``IPoiseSource` 实现,自动注入 HurtBox
- [x] `StatusEffectManager` + `StatusEffect`(抽象基类,架构 06_CombatModule §11`StatusEffectBase`+ 具体效果Poison、Burn、Freeze、Stun**已在 P2-4b 实现**
- [x] `IBreakable`(机关/障碍物交互接口;`CombatInterfaces.cs` 内定义;`HitBox` 已在命中非 `HurtBox` 时尝试调用
- [x] `ClashResolver`(拼刀系统:同帧玩家/敌人 HitBox 对碰检测,广播 `EVT_NailClash`;架构 06 §15✅ 2026-05-11`ClashConfigSO.cs``ClashResolver.cs` 新建;`HitBox.cs` 加入拼刀检测分支,`CanClash` / `IsActive` / `OwnerRigidbody` 属性)
#### P2-4动画事件系统24_AnimEventModule
- [ ] `AnimationEventType` enum20+ 事件
- [ ] `AnimationEventConfigSO`
- [ ] `AnimationEventBinder`
- [ ] `PlayerAnimationEvents`(挂在玩家上)
- [ ] `EnemyAnimationEvents`(挂在敌人上)
- [ ] `IAnimationEventHandler` 接口(⚠️ 非 `IAnimEventReceiver`,架构 24_AnimEventModule §1 patch
- [ ] 将 AttackState HitBox 激活时机从 FixedUpdate 改为 AnimEvent 驱动
- [ ] Editor 工具:`EventConfigEditor``[CustomEditor(typeof(AnimationEventConfigSO))]`时间轴标记点可视化、Clip 漂移检测(偏差>5帧警告、normalizedTime 越界保护、事件类型着色;架构 24 §10
#### P2-4动画事件系统24_AnimEventModule✅ Week 72026-05-11
- [x] `AnimationEventType` enum21 种事件类型
- [x] `AnimationEventConfigSO`
- [x] `AnimationEventBinder`
- [x] `PlayerAnimationEvents`(挂在玩家上)
- [x] `EnemyAnimationEvents`(挂在敌人上)
- [x] `IAnimationEventHandler` 接口(⚠️ 非 `IAnimEventReceiver`,架构 24_AnimEventModule §1 patch
- [x] 将 AttackState HitBox 激活时机从 FixedUpdate 改为 AnimEvent 驱动(已通过 Animancer `events.Add(0.3f/0.6f, ...)` 归一化时间事件实现)
- [x] Editor 工具:`EventConfigEditor``[CustomEditor(typeof(AnimationEventConfigSO))]`时间轴标记点可视化、Clip 漂移检测(偏差>5帧警告、normalizedTime 越界保护、事件类型着色;架构 24 §10
#### P2-4b状态效果系统06_CombatModule §11✅ Week 72026-05-11
- [x] `StatusEffectType.cs` 枚举Fire/Poison/Stagger/Freeze/Stun 架构定义 4 个值 Fire/Poison/Freeze/StunStagger 为实现扩展)
- [x] `StatusEffect.cs` 抽象基类双计时器Duration + TickTimerOnApply/OnStack/OnTick/OnExpire
- [x] `FireEffect.cs`DoTMaxStacks=1**3s**/0.5s/**1dmg True**/tickOnApply/OnExpire 设置 `_FireGlow` Shader 参数)
- [x] `PoisonEffect.cs`DoTMaxStacks=3**5s**/1s/**StackCount dmg True**/tickOnApply/OnStack/OnExpire 管理 `_PoisonGlow` Shader 参数)
- [x] `StaggerEffect.cs`硬直MaxStacks=1可自定义持续时间架构扩展非核心规格
- [x] `StatusEffectEventChannelSO.cs`SO 事件频道,携带 StatusEffectEvent struct架构用 StatusEffectType 直接广播,实现扩展为含 StackCount/RemainingDuration 的 struct 更利 UI
- [x] `StatusEffectManager.cs` 完整实现List + Dictionary 双结构ApplyEffect/CleanseEffect/CleanseAll/HasEffect`ApplyDirectDamage(DamageInfo)` 替代旧 DealDotDamage`SetShaderParam(string,float)` via MaterialPropertyBlockSpriteRenderer 初始化于 Awake
#### P2-5完整 VFX 反馈18_VFXFeedbackModule 完整)
- [x] `FeedbackConfigSO``HurtFlashColor`/`HurtFlashDuration`Phase 2 扩充 Feel 封装字段)
- [x] `IFeedbackPlayer` 接口(完整 APIPlayHit/PlayTakeHit/PlayDeath/PlayHeal/PlayLandImpact 等)+ `PlayerFeedback``EnemyFeedback``NullFeedbackPlayer` 实现
- [ ] `VFXCatalogSO` 填入全部 VFX Prefab命中/死亡/技能/环境)
- [ ] 接通 Feel MMF_Player 到相机震动、控制器震动
- [x] 接通 Feel MMF_Player 到相机震动、控制器震动 ✅ 2026-05-13新增 `PostProcessManager``RegionLightController` + `RegionLightCatalogSO``PaletteSwapSystem` + `PaletteCatalogSO``BaseGames.VFX.asmdef` 加入 `BaseGames.Player` 引用)
#### P2-6难度系统19_DifficultyModule
- [ ] `DifficultyLevel` enum
- [ ] `DifficultyScalerSO` × 4 份资产Easy/Normal/Hard/SteelSoul
- [ ] `DifficultyManager``DefaultExecutionOrder: -900`
- [ ] `EVT_DifficultyChanged` 频道
- [ ] `PlayerStats`/`EnemyStats`/`ShopController` 订阅难度系数
- [ ] 钢铁之魂模式:一命锁定 + SaveData 标记
#### P2-6难度系统19_DifficultyModule✅ Week 82026-05-10
- [x] `DifficultyLevel` enum(已在 Core.Events`Easy/Normal/Hard/SteelSoul`
- [x] `DifficultyScalerSO` × 4 份资产Easy/Normal/Hard/SteelSoul — 脚本已创Unity 内创建资产
- [x] `DifficultyManager``DefaultExecutionOrder: -900`SteelSoul 不可降级
- [x] `BoolEventChannelSO`新增BossBase 依赖)
- [x] `PlayerStats` 订阅 `DifficultyChangedEventChannel`,难度切换时按 HP 比例缩放(`hpRatio × newMax`)并广播 `_onHPChanged`/`_onMaxHPChanged` ✅ 2026-05-11
- [x] `EnemyStats` 订阅 `DifficultyChangedEventChannel` 支持运行时切换;`Initialize()` 只缩放 HP不缩放 Defense架构 19 §5提取 `ApplyHPScaler()` ✅ 2026-05-11
- [x] `ShopController.GetEffectivePrice()` 新增公开方法;`TryPurchase()` 改用实际价格(含 `ShopPriceMultiplier`)✅ 2026-05-11
- [x] `DeathRespawnService.StartGameOverCoroutine()` 实现:删除存档槽 → `ISceneService.LoadMainMenuCoroutine()` ✅ 2026-05-11
- [x] `SaveManager.CurrentSlot` 公开属性(供 DeathRespawnService 获取当前槽)✅ 2026-05-11
- [x] `GameManager.DeathFlow()` 接入 SteelSoul 分支:检查 `InstantDeathOnZeroHP`true 时调用 `StartGameOverCoroutine()` 跳过普通死亡流程 ✅ 2026-05-11
- [x] `DifficultyScalerSO` × 4 份资产Easy/Normal/Hard/SteelSoul — 脚本已创Unity 内创建资产)
- [x] 钢铁之魂模式:`SaveMeta.IsSteelSoul` 字段写入 + `DifficultyManager` 实现 `ISaveable`OnSave/OnLoad在读档时锁定难度 ✅ 2026-05-11
#### P2-7敌人扩展07_EnemyModule 剩余)
- [ ] `BossBase` + `BossOrchestrator`Phase 切换
- [ ] `AttackPatternSO` + `TelegraphSystem`(攻击前摇标注)
- [ ] `DeathShade`(死亡遗骸 Prefab
- [ ] `LootTableSO`(战利品掉落配置 SO`BaseWeight``ScaleWithDifficulty`;架构 07 §14+ `LootResolver`(按概率掷骰)+ `LootPickup`(弧线飞行动画
- [ ] `EnemyQuotaManager`(同屏最多 12 个活跃 BT每 10 帧重新评估优先级;架构 07 §13.5
- [ ] `BatchLOSSystem` + `ILOSRequester`Jobs+Burst 批量视线检测;超过 4 个活跃敌人时必须注册;架构 07 §15
- [ ] 敌人 Prefab 模板:远程弓箭手(含 Projectile 发射)
- [ ] `BD_` 任务类补充:`BD_FlyToTarget``BD_DropDown``BD_Teleport``BD_TelegraphAttack`
#### P2-7敌人扩展07_EnemyModule 剩余)✅ Week 92026-05-10
- [x] `BossBase`Phase 切换 EnterPhase/IsHPBelow/Die 广播
- [x] `ProjectileConfigSO` + `Projectile` (Linear/Arc/Homing/Parryable) + `ProjectileManager`
- [x] `RangedEnemy` + `FlyingEnemy`EnemyBase 子类
- [x] `DeathShade`IInteractableGeo 回收事件
- [x] `LootTableSO` + `LootResolver`(加权随机掉落 + 难度缩放;`SpawnGeo`/`SpawnItem` 调用 `CollectibleSpawner` 静态方法Phase 3 TODO 占位已移除)✅ 2026-05-11
- [x] `AttackPatternSO` + `TelegraphSystem` ✅ 2026-05-12
- [x] `EnemyQuotaManager` ✅ 2026-05-12
- [x] `BatchLOSSystem` + `ILOSRequester` ✅ 2026-05-12
- [x] `BD_` 任务类补充14 个 Action + Conditional✅ 2026-05-12
#### P2-8音频系统完整11_AudioModule 完整)
- [ ] `AudioEventSO`SFX 配置 SO持有 `AudioClip` + `volume` + `pitch` 随机化范围
- [ ] `GlobalSFXPlayer`全局静态 SFX 播放入口,配合对象池管理位置 SFX
- [ ] `AudioConfigSO` 完整填表(区域 BGM 映射 + 快照名称枚举
- [ ] 为所有模块 SFX 钩子连接 `AudioEventSO`(替代直接传递 `AudioClip`
#### P2-8音频系统完整11_AudioModule 完整)✅ Week 82026-05-10
- [x] `AudioEventSO`随机音效 SOPlay / PlayOneShot
- [x] `GlobalSFXPlayer`(静态 SFX 入口,2D + 世界坐标 3D 播放
- [x] 为所有模块 SFX 钩子连接 `AudioEventSO` ✅ 2026-05-13`CombatSFXController` 全部字段由 `AudioClip` 升级为 `AudioEventSO`,通过 `GlobalSFXPlayer.Play()` 播放,支持随机音量/音调/多片段
---
@@ -307,57 +328,78 @@ Phase 4: 内容与完善Boss 技能、叙事、支撑系统、平台发布)
### 任务清单
#### P3-1世界模块完整08_WorldModule
- [ ] `RoomTransition`(门/传送Additive 场景加载/卸载)
- [ ] `HazardZone`(即死/持续伤害区域)
- [ ] `Collectible`Geo/物品,弧线吸附)
- [ ] `DestructibleTile`(三帧图集,三种触发条件)+ `DirectionalDestructible`
- [ ] `DirectionalInteractable`OneShot 持久化)
- [ ] `MovingPlatform`(三种 MoveType + 乘客 Parent 方案)
- [ ] `CrumblePlatform`(四态状态机 + NavLink 联动)
- [ ] `FalseWall`(三种揭示条件)
- [ ] `MagicWall`(仅 GizmoLayer Matrix 实现)
- [ ] `SoftTerrain`Marker 组件)
- [ ] `PhantomInteractable`(继承 `DirectionalInteractable`,响应 `PhantomBody` 层)
- [ ] `WorldStateRegistry`(运行时缓存已触发/已破坏状态)
#### P3-1世界模块完整08_WorldModule✅ Week 10 代码完成
- [x] `RoomTransition`(门/传送Additive 场景加载/卸载)
- [x] `HazardZone`(即死/持续伤害区域)
- [x] `Collectible`Geo/物品,弧线吸附)
- [x] `DestructibleTile`(三帧图集,三种触发条件)+ `DirectionalDestructible`
- [x] `DirectionalInteractable`OneShot 持久化)
- [x] `MovingPlatform`(三种 MoveType + 乘客 Parent 方案)
- [x] `CrumblePlatform`(四态状态机 + NavLink 联动)
- [x] `FalseWall`(三种揭示条件)
- [x] `MagicWall`(仅 GizmoLayer Matrix 实现)
- [x] `SoftTerrain`Marker 组件)
- [x] `PhantomInteractable`(继承 `DirectionalInteractable`,响应 `PhantomBody` 层)
- [x] `WorldStateRegistry`(运行时缓存已触发/已破坏状态)
- [x] `CollectibleSpawner`(静态生成器;`SpawnGeo(Vector2, int)` / `SpawnItem(Vector2, string)`;由 `LootResolver` 调用)+ `CollectibleSpawnerConfig`MonoBehaviourPersistent 场景持有 GeoPrefab/ItemPrefab 引用Awake 注册到 CollectibleSpawner✅ 2026-05-11
- [x] `Collectible.SetGeo(int)` / `SetItem(string)`(运行时配置方法,由 CollectibleSpawner 实例化后调用;移除旧静态 SpawnGeo Debug.Log 占位)✅ 2026-05-11
- [x] `RoomTransition.HasItem` 接入 `WorldStateRegistry.IsCollected(itemId)`(不再返回硬编码 true新增 `[SerializeField] private WorldStateRegistry _worldState` 字段)✅ 2026-05-11
- [ ] 场景内端对端验证Unity 编辑器内 Prefab 装配 + 运行验证)
#### P3-2液体与谜题系统21_LiquidPuzzleModule
- [ ] `LiquidZone` + `LiquidType` enum
- [ ] `LiquidPhysicsConfigSO`(浮力、水下速度)
- [ ] `SwimState`(已在 P2-1 添加到 FSM
- [ ] `ISwitchable``IActivatable` 接口
- [ ] `PuzzleSwitch``PuzzleReceiver`AND/OR/XOR 逻辑)、`PuzzleWire`(可视化连接)
- [ ] `WorldMarker` + `BreadcrumbTracker`(导航提示
- [ ] `TutorialManager` + `ContextualHintTrigger`
#### P3-2液体与谜题系统21_LiquidPuzzleModule✅ Week 11 代码完成
- [x] `LiquidZone` + `LiquidType` enum
- [x] `LiquidPhysicsConfigSO`(浮力、水下速度)
- [x] `SwimState`(已在 P3-2 完成
- [x] `ISwitchable``IActivatable` 接口
- [x] `PuzzleSwitch``PuzzleReceiver`AND/OR/XOR 逻辑)、`PuzzleWire`(可视化连接)
- [x] `WaterDangerState` + `UnderwaterPostProcessingController`(架构 21 §12-13
- [x] `FootstepMaterial` + `FootstepAudioConfigSO` + `UnderwaterAudioController`(架构 21 §3.3-3.4
- [x] `WorldMarker` + `BreadcrumbTracker` ✅ 2026-05-12
- [x] `TutorialManager` + `ContextualHintTrigger` ✅ 2026-05-12
#### P3-3进度系统09_ProgressionModule
- [ ] `AbilityGate`(能力锁区域,检查 `PlayerStats.unlockedAbilities`
- [ ] `AbilityUnlock`(解锁 Prefab播放解锁演出
- [ ] `CharmSO``CharmManager`(护符装备/卸载,Slot 管理)
- [ ] `SkillSO``SpellSO`(技能/魔法数据)
- [ ] `ToolSlotManager`(两槽工具 + 冷却)+ `ToolHUD`
- [ ] `EquipmentManager`(武器/防具装备)
#### P3-3进度系统09_ProgressionModule✅ 完成2026-05-10
- [x] `AbilityGate`(能力锁区域,检查 `PlayerStats.HasAbility()`
- [x] `AbilityUnlock`(解锁 Prefab播放解锁演出
- [x] `CharmSO``EquipmentManager`(护符装备/卸载,Notch 管理)
- [x] `CharmCatalogSO`(护符目录 SO`Find(charmId)→CharmSO``EquipmentManager.AddToCollection` + `OnLoad` 依赖)✅ 2026-05-11
- [x] `EquipmentManager.AddToCollection` 完整实现(从 CharmCatalogSO 查找 → 去重加入 `_collected`;旧 Debug.Log 占位已移除)✅ 2026-05-11
- [x] `EquipmentManager.OnSave/OnLoad` 完整实现(读写 `OwnedCharmIds`OnLoad 恢复 `_collected` 后逐个调用 `TryEquipCharm`)✅ 2026-05-11
- [x] `FormSkillSO``SkillManager``SkillModifierRegistry`(技能数据+管理+修改器)
- [x] `ToolSO``ToolSlotManager`(两槽工具 + 冷却)+ `ToolHUD`
- [x] `ToolCatalogSO`(工具目录 SO`Find(toolId)→ToolSO``ToolSlotManager.OnLoad` 依赖)✅ 2026-05-11
- [x] `ToolSlotManager.OnLoad` 完整实现(从 ToolCatalogSO 查找两槽 toolId → 调用 `EquipTool(i, tool)`;旧 TODO 已移除)✅ 2026-05-11
- [x] `EquipmentManager`(护符装备,多态 ICharmEffect
- [x] `RegionDefinitionSO``ProgressLock``BossProgressTracker``HPContainerPickup`
- [x] `SkillHitBoxInstance`(技能 HitBox Prefab 组件)
- [x] `CharmEffectDrawer`Editor 护符效果下拉 Inspector
#### P3-4任务与挑战22_QuestChallengeModule
- [ ] `QuestSO``QuestObjectiveSO``RewardSO`
- [ ] `QuestManager`(进度追踪,订阅世界事件
- [ ] `QuestGiver``IInteractable` NPC
- [ ] `ChallengeRoomSO``ChallengeEncounterSO``BossRushSequenceSO`
- [ ] `ChallengeRoomManager`
#### P3-4任务与挑战22_QuestChallengeModule✅ 完成2026-05-11
- [x] `QuestSO``QuestObjectiveSO`5 种具体类型)`RewardSO`(物品发放通过 `StringEventChannelSO _onItemGranted.Raise(id)` 广播,旧 InventoryManager 占位已移除)✅ 2026-05-11
- [x] `QuestManager`ISaveable事件驱动进度追踪)
- [x] `QuestGiver`继承 InteractableNPC,根据任务状态切换对话
- [x] `InteractableNPC``DialogueSequenceSO`BaseGames.Dialogue 基础实现)
- [x] `ChallengeRoomSO``ChallengeEncounterSO``BossRushSequenceSO`
- [x] `ChallengeRoomManager`Addressables 波次生成,快存/快读)
- [x] `ChallengeRoomTrigger`IInteractable 入口,事件触发场景加载)
- [x] `EnemyBase` 扩展:`EnemyId` 属性 + `OnDied` 事件
#### P3-5地图与商店15_MapShopModule
- [ ] `MapManager`(订阅 `EVT_RoomEntered` 事件,调用 `OnRoomEntered(string roomId)` 记录已探索房间;⚠️ 无 `RevealRoom` 公共方法,架构 15 §1.2 patch
- [ ] `MapDatabaseSO` + `MapRoomDataSO`(房间数据 SO`RoomRevealData`架构 15 §1.1
- [ ] `MapUI`(房间格子渲染,玩家位置实时标记,破坏/机关状态叠加
- [ ] `FastTravelSystem`(快速传送锚点
- [ ] `ShopController``TryPurchase`,难度价格倍率接入
- [ ] `ShopInventorySO`
- [ ] Editor 工具:`MapRoomDataEditor``[CustomEditor(typeof(MapRoomDataSO))]`Scene 句柄拖拽 GridPosition/GridSize消除手动整数对齐误差"居中 Scene View 到此房间"按钮;架构 15 §5P3 优化
#### P3-5地图与商店15_MapShopModule✅ 完成2026-05-11
- [x] `MapRoomDataSO` + `MapDatabaseSO` + `RoomExitData` + `ExitDirection`(房间数据 SO架构 15 §1.1
- [x] `MapManager`ISaveable订阅 `EVT_RoomEntered``SetMapped(roomId)``[DefaultExecutionOrder(-700)]`架构 15 §1.2
- [x] `MapPanel` + `MapRoomCellUI`(格子地图 UI订阅 `EVT_MapUpdated` 增量刷新;架构 15 §1.3
- [x] `MapPlayerTracker``WorldToCell` 换算LateUpdate 找所在房间;架构 15 §1.4
- [x] `MapPinManager`ISaveable`_pins: List<MapPin>`MapPin/PinType 定义在 SaveData.cs 避免循环依赖;架构 15 §1.5
- [x] `ShopItemSO` + `ShopItemType`(架构 15 §2.1
- [x] `ShopInventorySO` + `RestockPolicy`(架构 15 §2.2
- [x] `ShopController`ISaveable`TryPurchase``GetAvailableItems``Restock``ShopPanel` 存根;架构 15 §2.3
- [x] `ShopNPC`IInteractable`DialogueEventChannelSO` 触发招呼对话→打开商店;架构 15 §2.4
- [x] Editor 工具:`MapRoomDataEditor``[CustomEditor(typeof(MapRoomDataSO))]`Scene 句柄拖拽 GridPosition/GridSize"居中 Scene View"按钮;架构 15 §5
#### P3-6存档完善12_SaveModule 剩余)
- [ ] `CrashReporter` + `EmergencySaveService` 定时检点完整实现
- [ ] `SaveMigrator` 版本迁移策略v1→v2 字段兼容)
- [ ] 存档槽 UI新建/删除/选择存档)
#### P3-6存档完善12_SaveModule 剩余)✅ 2026-05-11
- [x] `CrashReporter` + `EmergencySaveService.PromoteToSlot` 完整实现(定时检点 + 崩溃日志)
- [x] `SaveMigrator` 版本迁移策略v1.0→v1.1→v2.0→v2.1 字段兼容)
- [x] 存档槽 UI`SaveSlotController` + `SaveSlotUI`新建/删除/选择存档)
- [x] `SaveManager.DeleteSlotAsync` + `BaseGames.UI.asmdef` 添加 `BaseGames.Core.Save` 引用
---
@@ -367,57 +409,74 @@ Phase 4: 内容与完善Boss 技能、叙事、支撑系统、平台发布)
### 任务清单
#### P4-1Boss 技能系统23_BossSkillModule
- [ ] `BossSkillSO``BossSkillType` enum
- [ ] `AttackPatternSO`(已在 P2-7 基础上扩展
- [ ] `SkillSequenceSO`(多阶段技能编排
- [ ] `BossSkillExecutor`
- [ ] `WeakPointSystem`(脆弱点组件,命中切换 Boss 阶段
- [ ] `VulnerabilityWindow`
#### P4-1Boss 技能系统23_BossSkillModule✅ 2026-05-11
- [x] `BossSkillTypes.cs`:全部枚举(`BossSkillCategory``BossSkillType``InteractionTag``VulnTriggerType``WeakPointType``CounterType``ArenaEventType`)及 Serializable struct`VulnerabilityWindow``PlayerCounterResponse``ArenaEventTrigger``ArenaEventParams``ArenaEventData``BossResourceCost``IArenaInteractable`
- [x] `BossSkillSO``CreateAssetMenu`,引用 `AttackPatternSO[]``VulnerabilityWindow[]``PlayerCounterResponse[]``ArenaEventTrigger[]``BossResourceCost``PoiseWindowConfig``ClipTransition`
- [x] `AttackPatternSO`(伤害/弹幕/AoE/时序参数;`DamageSourceSO` 引用
- [x] `SkillSequenceSO``SequenceStep[]`,含重复逻辑 `RepeatIfPlayerInRange`
- [x] `BossResourceConfigSO`Boss 自身资源配置,如愤怒值
- [x] `BossSkillExecutor`Coroutine 实现;`ExecuteSkill()` / `InterruptCurrentSkill()`VulnerabilityWindow 与攻击序列并行协程;注:架构规格为 UniTask当前用 Coroutine 实现以匹配项目实际依赖)
- [x] `WeakPointSystem`(弱点 HurtBox 激活管理;`SetActive(bool, float, bool)``_onVulnerabilityWindowOpened` 广播)
#### P4-2叙事系统14_NarrativeModule
- [ ] `DialogueManager`DialogueGraph SO 驱动)
- [ ] `CutsceneManager` + `CutsceneSO` + `CutsceneTrigger`
- [ ] `EventChainSO`(线性事件链触发器)
- [ ] `InteractableNPC` 基类(`IInteractable`,触发对话)
#### P4-2叙事系统14_NarrativeModule✅ 2026-05-11
- [x] `DialogueSequenceSO` 补全 `DialogueLine.portraitSprite` / `typewriterDelay` 字段 ✅ 2026-05-11
- [x] `DialogueUI`打字机效果StringBuilder 零分配;`ShowLine` / `SkipTyping` / `Hide``IsTyping` 状态属性)✅ 2026-05-11
- [x] `DialogueManager`Coroutine 驱动打字序列;`StartDialogue(sequence, npcId)`Action Map 切换;广播 `EVT_NpcDialogueCompleted`;注册到 ServiceLocator✅ 2026-05-11
- [x] `InteractionPromptController`(交互提示 UI键盘/手柄图标自动切换;挂在 IInteractable 子节点)✅ 2026-05-11
- [x] `NarrativeNPC`(扩展 InteractableNPC`DialogueVersion[]` 条件对话版本;接入 `WorldStateRegistry`)✅ 2026-05-11
- [x] `InteractableNPC.PlayDialogue()` 接入 `ServiceLocator.GetOrDefault<DialogueManager>()` ✅ 2026-05-11
- [x] `EventChainSO` + 内置 7 个 `ChainCondition` + 10 个 `ChainAction`(全事件频道驱动,无跨程序集直接依赖;`BaseGames.EventChain` 新程序集)✅ 2026-05-11
- [x] `EventChainManager`(订阅 5 条 StringEventChannelSO 中继EvaluateAll存档集成防重入✅ 2026-05-11
- [x] `CutsceneSO``TimelineAsset``CutsceneBinding[]``CameraBlendProfileSO` 混合;`DialogueSequenceSO[]` 叠加层)✅ 2026-05-11
- [x] `CutsceneManager``PlayableDirector` 封装;`PlayById` 事件驱动Action Map 切换;`EVT_CutsceneStarted/Ended`)✅ 2026-05-11
- [x] `CutsceneTrigger`4 种模式OnEnter/OnInteract/OnSceneLoad/OnEvent实现 `IInteractable`WorldStateRegistry 去重)✅ 2026-05-11
- [x] `SignalEmitterClip` + `SignalEmitterBehaviour`Timeline → VoidEventChannelSO 零耦合桥接;支持循环重播)✅ 2026-05-11
#### P4-3输入重绑定04_InputModule §6
- [ ] `RebindPanel`
- [ ] `RebindActionRow`
- [ ] `ConflictDetector`
- [ ] `RebindPersistence`(写入 `PlayerPrefs`
#### P4-3输入重绑定04_InputModule §6✅ 2026-05-11
- [x] `InputReaderSO` 补全重绑定 API`StartRebinding()`(自动 Dispose op`SaveBindingOverrides()``LoadBindingOverrides()``ResetBindings()``GetAllActionMap()``FindAction()` ✅ 2026-05-11
- [x] `InputReaderBootstrap` 启动时调用 `LoadBindingOverrides()`(在 `EnableGameplayInput()` 前)✅ 2026-05-11
- [x] `ConflictDetector`(扫描 Gameplay Map 重复 effectivePath返回冲突 Action 名称 HashSet✅ 2026-05-11
- [x] `RebindActionRow`(单行:显示当前绑定 HumanReadable 路径;排他锁 SetInteractable冲突红色高亮✅ 2026-05-11
- [x] `RebindPanel`(统一协调排他重绑定流程;`OnResetAll`;完成后自动 `SaveBindingOverrides`)✅ 2026-05-11
- [x] `BaseGames.UI.asmdef` 补充 `BaseGames.Input` + `Unity.InputSystem` 引用 ✅ 2026-05-11
#### P4-4UI 完整10_UIModule 剩余)
- [ ] `PauseMenu`(设置/键位重绑定/退出
- [ ] `InventoryPanel``EquipmentPanel``MapPanel``SkillPanel`
- [ ] Screen Transition Overlay黑屏淡入淡出
- [ ] `SaveSlotController` + `SaveSlotUI`(主菜单 3 槽存档卡片 UI架构 10 §7.5
- [ ] `LoadingOverlay`(全屏加载界面;订阅 `EVT_LoadingOverlay` BoolEventChannelSO;架构 10 §8
- [ ] `FloatingDamageText`(对象池驱动的伤害数字飘字;架构 10 §10
- [ ] `ToastNotification`(成就/任务 Toast 弹出;架构 10 §11
- [ ] `InputDeviceIconSwitcher`(键盘/手柄按键图标切换;订阅 `EVT_InputDeviceChanged`;架构 10 §12
- [ ] 所有 Panel 层级配置(`UIManager.OpenPanel` 优先级;⚠️ 非 `ShowPanel`架构 10 §2
- [x] `PauseMenuController`(设置/键位重绑定/退出;架构 10 §7.3)✅ 2026-05-11
- [x] `SettingsPanelController`(音量/画质/帧率/VSync 设置面板;架构 10 §7.4)✅ 2026-05-11
- [x] `BossHPBar`Boss 血条 + 阶段标记;订阅 EVT_BossFightToggled/HPChanged架构 10 §4✅ 2026-05-11
- [x] `SaveIndicator`(右下角存档提示;订阅 EVT_SaveIndicatorVisible架构 10 §7.6)✅ 2026-05-11
- [x] `LoadingOverlay`(全屏黑幕淡入淡出;订阅 EVT_LoadingOverlay架构 10 §8✅ 2026-05-11
- [x] `LoadingScreenManager`(进度条 + 提示文字 + 随机背景;架构 10 §7.7)✅ 2026-05-11
- [x] `FloatingDamageText` + `FloatingDamageSpawner`(对象池伤害飘字;订阅 EVT_DamageDealt架构 10 §10✅ 2026-05-11
- [x] `ToastNotification` + `ToastManager`(成就/能力 Toast 队列弹出;架构 10 §11✅ 2026-05-11
- [x] `InputDeviceIconSetSO` + `InputDeviceIconSwitcher` + `InputIconImage`(键鼠/手柄图标切换;架构 10 §12✅ 2026-05-11
- [x] `BaseGames.UI.asmdef` 补充 `BaseGames.Combat` 引用 ✅ 2026-05-11
- [x] `SaveSlotController` + `SaveSlotUI`(主菜单 3 槽存档卡片 UI架构 10 §7.5)✅ 已在 P3-6 完成
#### P4-5支撑模块16_SupportingModules
- [ ] `LocalizationManager`CSV 表格驱动,`GetText(key)`
- [ ] `IPlatformService` ServiceLocator + `SteamPlatformService` + `NullPlatformService`
- [ ] `AchievementManager`(通过 `ServiceLocator.Get<IPlatformService>()` 接入平台成就;⚠️ 非直接依赖 `ISteamAchievement`架构 16 §3
- [ ] `AnalyticsManager` + `IAnalyticsBackend`
- [ ] `CheatConsole`Debug 作弊命令
- [ ] `AntiSoftlockSystem`(卡关检测 + 自动解锁)
- [ ] `SpeedrunTimer`IGT/RTA 计时
#### P4-5支撑模块16_SupportingModules✅ 已完成
- [x] `LocalizationManager` + `LanguageManagerSO``#if UNITY_LOCALIZATION` 守卫fallback 返回 key架构 16 §5
- [x] `IPlatformService` ServiceLocator + `SteamPlatformService` + `NullPlatformService` + `PlatformBootstrap`(架构 16 §2
- [x] `AchievementManager`(通过 `ServiceLocator.Get<IPlatformService>()` 接入平台成就;12 条件类;架构 16 §3
- [x] `AnalyticsManager`(本地 JSON 日志TrackBossKill/TrackDeath/TrackSessionStart/End架构 16 §7
- [x] `DebugCheatSystem``#if UNITY_EDITOR || DEVELOPMENT_BUILD`heal/addgeo/godmode/unlock/killall/scene/revive架构 16 §4
- [x] `AntiSoftlockSystem` + `RoomEscapeInfoSO` + `HardAbilityGate`(卡关检测 + 自动解锁;架构 16 §6
- [x] `SpeedrunTimer`unscaledDeltaTimeISaveable架构 16 §8
- [x] `AccessibilitySettingsSO` + `AccessibilityManager` + `ColorBlindFilter`(色盲矩阵 URP RenderFeature架构 16 §6
- [x] `BaseGames.Support.asmdef`(引用 Core/Events/Save/Input/Player/Enemies/Combat/World/Progression/Platform/TMP/URP
#### P4-6编辑器工具09_EditorExtensions
- [ ] `AddressKeyValidator`完整版,Build 前校验)
- [ ] `AddressReferenceGraphWindow``BaseGames/Tools/Asset Reference Graph`;扫描所有 `.cs``AddressKeys.X` 的引用,标红孤儿 key导出 CSV架构 13 §11
- [ ] `DestructibleTile`/`DirectionalDestructible`/`FalseWall`/`PhantomPlate` Gizmo 完整实现
- [ ] `NavSurface` 快速烘焙快捷键
- [ ] SO 事件频道 Inspector 实时测试按钮(`RaiseInEditor`
- [ ] `CharmEffectDrawer``CharmSO.effects` 自定义 PropertyDrawer架构 16 §4.1
- [ ] `SOValidationRunner` + `IValidatable` 接口(预构建 SO 数据验证;菜单 `Tools/Validate All SOs` + Build Pre-process;架构 16 §10
- [ ] `EventBusMonitorWindow`Editor Only运行时事件监控面板显示订阅者数量架构 02 §9
- [ ] `EventChainEditorWindow``BaseGames/Tools/Event Chain Viewer`事件链可视化 + 运行时状态着色 + 依赖箭头;架构 14 §13
- [ ] `BossSkillSequenceWindow``BaseGames/Tools/Boss Skill Sequence Viewer`SkillSequenceSO 甘特图时间轴可视化;架构 23 §12
#### P4-6编辑器工具09_EditorExtensions✅ 2026-05-11
- [x] `AddressKeyValidator`Build Pre-process hook`AddressKeyValidatorBuildHook``AddressKeyValidator.cs` 补充callbackOrder=0架构 13 §10✅ 2026-05-11
- [x] `AddressReferenceGraphWindow``BaseGames/Tools/Asset Reference Graph`;扫描所有 `.cs``AddressKeys.X` 的引用,标红孤儿 key橙色标注不在 Addressables 的 key一键导出 CSV架构 13 §11✅ 2026-05-11
- [x] `DirectionalDestructible`/`FalseWall`/`MovingPlatform`/`HazardZone`/`RoomTransition` Gizmo 已实现;`DestructibleTile` Gizmo`DestructibleTileEditor.cs`)已补充;`PhantomPlate` 已创建 ✅ 2026-05-11
- [x] `NavSurfaceBakeShortcut``%#b` 快捷键;`BaseGames/Tools/Bake All NavSurfaces`;完成时 SetDirty + 打印用时;架构 PathBerserker2d✅ 2026-05-11
- [x] `EventChannelEditor``VoidBaseEventChannelSO` RaiseInEditor 按钮;`BaseEventChannelSO<T>` 订阅者数量显示Play Mode only架构 02 §9✅ 2026-05-11
- [x] `CharmEffectDrawer``CharmSO.effects` 自定义 PropertyDrawer实现为 `CharmSOEditor`,含类型下拉+效果预览;架构 16 §4.1)✅ 已在 P3-3 完成
- [x] `SOValidationRunner` + `IValidatable` 接口(预构建 SO 数据验证;菜单 `Tools/Validate All SOs` + `IPreprocessBuildWithReport`;架构 16 §10✅ 2026-05-11
- [x] `EventBusMonitorWindow`Editor Only运行时事件监控面板显示订阅者数量架构 02 §9
- [x] `EventChainEditorWindow``BaseGames/Tools/Event Chain Viewer`左侧链列表/右侧条件+动作表格Play Mode 运行时着色绿/橙;`ChainCompletedCondition` 依赖链显示;执行日志最近 20 条;双击 PingObject架构 14 §13✅ 2026-05-11
- [x] `BossSkillSequenceWindow``BaseGames/Tools/Boss Skill Sequence Viewer``BossSkillSO`/`SkillSequenceSO` 甘特图时间轴Windup黄/Active红/Recovery灰/Vuln绿/Delay暗灰拖放加载架构 23 §12✅ 2026-05-11
- [x] `AchievementSOEditor``[CustomEditor(typeof(AchievementSO))]`;条件中文类型标签;内联展开 SO 字段Ping/Delete 按钮;架构 16 §2.4)✅ 2026-05-11
- [x] `BaseGames.Editor.asmdef` 补充 `BaseGames.EventChain` 引用 ✅ 2026-05-11
---