docs(enemy): 计划补三条实测坑与两处修正
执行须知新增:EnemyBase.Abilities 属性遮蔽同名命名空间(成员访问位置须写全名, Task 16/17 会再遇到);unity_get_compilation_errors 在编译成功时不报警告, '0 warnings' 是上报口径而非真值;MCP 测试运行器忽略过滤参数。 Task 5:选招器防重复的重置移出 BossBase.OnSpawn(Task 3 审查确认应归 EnemyBase.OnSpawn 以覆盖全部池化敌人)。 Task 21:残留扫描的预期由「无命中」改为「BD_/行为树 仍有约 20 处待清」。
This commit is contained in:
@@ -35,6 +35,24 @@
|
||||
|
||||
⚠️ **MCP 卡死排查**:Unity 编辑器窗口失焦会让 MCP 队列无限期卡住(不是超时)。若某个 MCP 调用长时间无返回,把 Unity 窗口置前即可恢复,不要盲目重试。
|
||||
|
||||
### 两个实测踩过的坑(Task 3 执行时发现)
|
||||
|
||||
**1. `EnemyBase.Abilities` 属性遮蔽 `BaseGames.Enemies.Abilities` 命名空间。**
|
||||
`EnemyBase` 有 `public EnemyAbilityRegistry Abilities { get; }`。在**类型位置**
|
||||
`new Abilities.EnemyAttackSelector(...)` 能编译(解析为命名空间),但在**成员访问位置**
|
||||
`Abilities.EnemyAttackSelector.SomeConst` 编译失败(解析为那个属性)。
|
||||
在 `EnemyBase` 内引用该命名空间下的静态成员时必须写全 `BaseGames.Enemies.Abilities.…`。
|
||||
Task 16 / 17 都要改 `EnemyBase`,会再遇到。
|
||||
|
||||
**2. `unity_get_compilation_errors` 在程序集编译成功时不报警告。**
|
||||
Unity 只对**编译失败**的程序集给出完整诊断集。`ChargeAbility.cs:29-30` 有两个既存
|
||||
`CS0414`(`[SerializeField]` 但从未读取),在绿色构建下完全不可见。
|
||||
所以"0 errors 0 warnings"是这个上报口径下的结果,不等于真的零警告——
|
||||
后续任务若在构建一度失败时看到这两条,那是既存问题,不是自己引入的。
|
||||
|
||||
**3. MCP 测试运行器忽略过滤参数。** `unity_testing_run_tests` 的 `testFilter` / `filter` 无效,
|
||||
每次都跑整个 EditMode 套件。这不影响正确性(等于免费拿到全量回归),但别把全量结果误读成过滤结果。
|
||||
|
||||
### 项目硬约束
|
||||
|
||||
1. **禁止下游兜底**(CLAUDE.md 第 6 条):不要用 `?? 默认值` / `try-catch` / `if(null) return` 掩盖上游漏配。缺配置就 `Debug.LogError` 或抛异常。
|
||||
@@ -622,7 +640,7 @@ namespace BaseGames.Enemies.Abilities
|
||||
|
||||
- [ ] **Step 5: 跑测试确认通过**
|
||||
|
||||
Test Runner → EditMode → `EnemyAttackSelectorTests`。期望:全部 passed(原 9 个 + 新 5 个 = 14)。
|
||||
Test Runner → EditMode → `EnemyAttackSelectorTests`。期望:全部 passed(原 10 个 + 新 5 个 = 15)。
|
||||
|
||||
- [ ] **Step 6: `EnemyStatsSO` 加系数字段**
|
||||
|
||||
@@ -964,9 +982,11 @@ Test Runner → EditMode → `BossPhaseAbilityGateTests`。期望:4 passed。
|
||||
|
||||
```csharp
|
||||
_phaseGate?.ApplyPhase(0); // 对象池复用:回到阶段 0 的启用集
|
||||
AttackSelector?.ResetRepeatMemory();
|
||||
```
|
||||
|
||||
> 选招器的防重复记忆**不在这里**重置——Task 3 的代码审查发现它该归 `EnemyBase.OnSpawn()`
|
||||
> (覆盖全部池化敌人,而非只有 Boss),已在 Task 3 的修正里落地。此处只管阶段门。
|
||||
|
||||
- [ ] **Step 6: 编译 + 全量回归**
|
||||
|
||||
MCP `unity_get_compilation_errors` 期望 0/0;`Run All` 期望全绿。
|
||||
@@ -2809,7 +2829,14 @@ grep -rn "BossSkill\|WeakPoint\|Telegraph\|AttackPattern\|SkillSequence\|StopBeh
|
||||
Assets/_Game/Scripts --include=*.cs
|
||||
```
|
||||
|
||||
期望:无命中。若有注释残留,一并清掉(CLAUDE.md 第 4 条)。
|
||||
`BossSkill|WeakPoint|Telegraph|AttackPattern|SkillSequence|StopBehaviorTree` 期望无命中(相关类型已删)。
|
||||
|
||||
`BD_|行为树` **预期仍有命中**——Task 3 执行时实测 `Assets/_Game/Scripts/Enemies/` 下约 20 处,
|
||||
散落在 `EnemyAnimationConfigSO` / `SensorSlotNames` / `EnemyAbilityBase` / `EnemyDeathSequence`
|
||||
/ `ChaoFengBoss` 等文件的注释与 `[Tooltip]` 里。其中一部分会随 Task 16/17/19/20 自然消失
|
||||
(`BossSkillSO`、`TelegraphSystem` 整文件删除;`BossBase`、`EnemyBase`、`EnemyDeathSequence`
|
||||
在各自任务里改到)。**本步负责清掉剩余的**:逐个改为只描述功能的表述,不删除功能性内容。
|
||||
清完后再跑一次 grep,此时才应无命中。
|
||||
|
||||
- [ ] **Step 3: 更新指导手册**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user