diff --git a/Docs_Dev/superpowers/plans/2026-07-30-boss-ai-single-track.md b/Docs_Dev/superpowers/plans/2026-07-30-boss-ai-single-track.md index 588acfed..86d600d2 100644 --- a/Docs_Dev/superpowers/plans/2026-07-30-boss-ai-single-track.md +++ b/Docs_Dev/superpowers/plans/2026-07-30-boss-ai-single-track.md @@ -63,6 +63,22 @@ Unity 只对**编译失败**的程序集给出完整诊断集。`ChargeAbility.c **不要**用反射直写字段——前者跑的是真实的 `GetComponentInParent` 解析路径,后者是伪造结果。 只检查 `enabled` 标志本身(如阶段门的启停断言)则不需要 `Awake`。 +**5. ⚠️ `[RequireComponent]` 指向抽象类型时 `AddComponent` 返回 null。**(Task 6 实测证实) +`HurtBox` 标了 `[RequireComponent(typeof(Collider2D))]`,而 `Collider2D` 是抽象类, +Unity 无法自动补齐 → `AddComponent()` 返回**真正的 null**(不是 fake-null)。 +建测试对象时必须先挂一个具体碰撞体: + +```csharp +_host.AddComponent(); // 必须在 HurtBox 之前 +var hb = _host.AddComponent(); +``` + +同样带该特性的还有 `HitBoxColliderProxy` / `PerceptionTriggerProxy` / `LethalTrap` 等 +(`HitBox` 本身**没有**);Task 12 新建的 `BossFightTrigger` 也标了它, +给它建测试或裸建物体时同理。 +旁证:`HurtBoxEditor.cs:97` 早就为此写了「先加 Collider2D 以满足 HurtBox 的 RequireComponent」—— +这个坑项目里踩过一次,只是没写进规范。 + ### 项目硬约束 1. **禁止下游兜底**(CLAUDE.md 第 6 条):不要用 `?? 默认值` / `try-catch` / `if(null) return` 掩盖上游漏配。缺配置就 `Debug.LogError` 或抛异常。