From 5046125acb1a4a8de93950cd911e935560c6b952 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 30 Jul 2026 14:04:42 +0800 Subject: [PATCH] =?UTF-8?q?docs(enemy):=20=E6=89=A7=E8=A1=8C=E9=A1=BB?= =?UTF-8?q?=E7=9F=A5=E7=AC=AC=205=20=E6=9D=A1=E2=80=94=E2=80=94RequireComp?= =?UTF-8?q?onent=20=E6=8C=87=E5=90=91=E6=8A=BD=E8=B1=A1=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=97=B6=20AddComponent=20=E8=BF=94=E5=9B=9E=20null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HurtBox 标了 [RequireComponent(typeof(Collider2D))],Collider2D 是抽象类, Unity 无法自动补齐,AddComponent() 返回真 null。建测试对象须先挂 具体碰撞体。Task 6 实测证实;HurtBoxEditor.cs:97 早有同样注释,说明这个坑 项目里踩过但没写进规范。 --- .../plans/2026-07-30-boss-ai-single-track.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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` 或抛异常。