docs(enemy): Task 19 补 Step 0——两处计划遗漏的引用,不清则删除任务必然编译失败

ChaoFengKnockdownCounter.cs:82 有 BossSkillExecutor 的编译期类型引用,
该文件既不在删除清单也未安排改动,却仍被 ChaoFengBoss 使用。
EditorScaffoldUtils 的命名前缀表里有 BossSkillSO/SkillSequenceSO 两条死条目。

后续任务再添一项:池化敌人复活带着上一条命的冷却——OnSpawn 里
InterruptAll 的注释声称重置冷却,实际 Interrupt 在未运行时提前返回、
运行时又是设置而非清零冷却。影响全体池化敌人。
This commit is contained in:
2026-07-30 16:28:21 +08:00
parent 822dc90c21
commit ef1998db2b
@@ -2751,6 +2751,30 @@ AI 图挂 When(x => x.Boss.ResourceFull) 边进专属招态。
**Files:** **Files:**
- Delete: 9 个脚本(见下) - Delete: 9 个脚本(见下)
- [ ] **Step 0: 先清掉两处计划遗漏的引用(Task 16–18 执行时发现,不清则本 Task 必然编译失败)**
**0a. `ChaoFengKnockdownCounter.cs:82` —— 编译期类型引用,必须改:**
```csharp
// 改前
_boss.GetComponentInChildren<BossSkillExecutor>()?.InterruptCurrentSkill();
// 改后(与 BossBase 瘦身时同一形状)
_boss.Abilities.InterruptAll(InterruptReason.ExternalRequest);
```
该文件不在删除清单里且仍被 `ChaoFengBoss._knockdownCounter` 使用(`DefeatSequence`
`OnDamageTaken` 都会调)。按需补 `using BaseGames.Enemies.Abilities;`
⚠️ 注意 `EnemyBase.Abilities` 属性遮蔽同名命名空间(执行须知第 1 条),写法参照 `BossBase` 里已落地的那处。
**0b. `EditorScaffoldUtils.cs:21-22` —— 命名前缀表里的死条目:**
```csharp
{ "BossSkillSO", ("SKL_", "SKL_{Name},例:SKL_BossRage") },
{ "SkillSequenceSO", ("SKL_", "SKL_Seq_{Name},例:SKL_Seq_RageCombo") },
```
字符串字面量,不影响编译,但类型删除后是误导性死配置(还与 `AssetFolderSpec``ABL_` 冲突)。删掉这两行。
- [ ] **Step 1: 确认零引用** - [ ] **Step 1: 确认零引用**
```bash ```bash
@@ -2980,5 +3004,6 @@ EnemyAbilityModule(能力资产编辑器总览)。"
| `BossEncounterCoordinator` | 多体 Boss 交替出招令牌。等真设计双体 Boss 时再做。见 spec §7.2 | | `BossEncounterCoordinator` | 多体 Boss 交替出招令牌。等真设计双体 Boss 时再做。见 spec §7.2 |
| 嘲风动画 Clip 接入 | 美术资源缺口。Clip 到位后校招式判定时序与预警节奏 | | 嘲风动画 Clip 接入 | 美术资源缺口。Clip 到位后校招式判定时序与预警节奏 |
| `BrainBuilder.Build()` 校验"态是否有出边" | Task 9+10 执行时发现:`Build()` 只校验"边指向的态是否已声明"(`RequireState` 的正向),**不校验反向**——一个已声明却没有任何出边的非终态会让敌人永久卡住且零报错。`BossFragments.PhaseTransition` 按设计不自带出边,正是这类风险点。做法是给 `AiStateFragments.Terminal` 加显式终态标记,`Build()` 对"非终态且无出边"抛异常 | | `BrainBuilder.Build()` 校验"态是否有出边" | Task 9+10 执行时发现:`Build()` 只校验"边指向的态是否已声明"(`RequireState` 的正向),**不校验反向**——一个已声明却没有任何出边的非终态会让敌人永久卡住且零报错。`BossFragments.PhaseTransition` 按设计不自带出边,正是这类风险点。做法是给 `AiStateFragments.Terminal` 加显式终态标记,`Build()` 对"非终态且无出边"抛异常 |
| **池化敌人复活时带着上一条命的冷却** | Task 16 执行时确认:`EnemyBase.OnSpawn``_abilities.InterruptAll(InterruptReason.Dead)` 的注释写着「重置能力冷却」,但 `EnemyAbilityBase.Interrupt``!_isRunning` 时**提前返回**,真跑到时又是**设置** `_cooldownEndTime = Time.time + cooldown*0.5f` 而非清零。所以冷却从未被重置。修法:给 `EnemyAbilityBase``ResetCooldown()`,在 `EnemyBase.OnSpawn` 遍历调用。影响全体池化敌人 |
| **`EnemyHurtState` 无受击动画时永久卡死(优先级最高)** | Task 15 实测发现:`EnemyHurtState.Enter``AnimConfig.Hurt` 为空时**提前返回且不安排回到 `Controlled`**。任何没有受击动画的敌人被打一次就永久停在 `Hurt` 态,`IsControllable` 恒假、AI 永久停摆。当前美术未接入,等于**大部分敌人一挨打就废**。典型的规则 6 静默提前返回。与 Boss 轨无关,影响全体敌人,应尽快单独立项 | | **`EnemyHurtState` 无受击动画时永久卡死(优先级最高)** | Task 15 实测发现:`EnemyHurtState.Enter``AnimConfig.Hurt` 为空时**提前返回且不安排回到 `Controlled`**。任何没有受击动画的敌人被打一次就永久停在 `Hurt` 态,`IsControllable` 恒假、AI 永久停摆。当前美术未接入,等于**大部分敌人一挨打就废**。典型的规则 6 静默提前返回。与 Boss 轨无关,影响全体敌人,应尽快单独立项 |
| `MoveToAnchor` 只在 `OnEnter` 采样锚点 | 锚点 Transform 若会移动则不会重新取点。与"锚点是固定点"的设定一致,但这是个隐含假设,将来若出现移动锚点需显式处理 | | `MoveToAnchor` 只在 `OnEnter` 采样锚点 | 锚点 Transform 若会移动则不会重新取点。与"锚点是固定点"的设定一致,但这是个隐含假设,将来若出现移动锚点需显式处理 |