docs(enemy): 按 Task 1+2 审查结论修订 spec 与计划
spec:ResourceFull 由「无组件时恒 false」改为显式抛,与 Boss facet、AnchorAt 统一为「依赖组件缺失一律抛,不返默认值」。 计划:Task 16 补上 BossBase 残余三处行为树残留的清理项(含运行时告警字符串); Task 19 记录 Patterns/ 是零外部引用的独立程序集,可整目录删。
This commit is contained in:
@@ -2441,6 +2441,12 @@ TestRoomA 加开战触发区。三件自检 0 error。
|
||||
**这属于既有缺陷,若出现请单独记录,不要在本 Task 顺手改**)
|
||||
9. `LastUsedSkillId = null;` 两处(`EnterPhase` 与 `OnSpawn`)删掉——防重复记忆已归选招器
|
||||
10. using 区里因此不再需要的 `using BaseGames.Boss;`、`using BaseGames.Parry;`
|
||||
11. **清掉本文件残余的三处行为树残留**(Task 1+2 执行时发现并留待此处,因为本 Task 正好重写这片区域):
|
||||
- 第 76 行附近的区段注释 `// ── 技能执行(BD Task 调用入口)` —— 随该区段一并删除
|
||||
- `BeginPhaseTransition` 文档里的 `BD_BossPhaseTransition 检查 IsPhaseTransitioning 来等待过渡完成。`
|
||||
—— 改为 `AI 图挂 When(x => !x.Boss.IsPhaseTransitioning) 边等待过渡完成。`
|
||||
- `BeginPhaseTransition` 重入告警里的运行时字符串 `请检查行为树逻辑是否重复触发阶段切换。`
|
||||
—— 改为 `请检查 AI 图是否重复触发阶段切换。`(这条是开发期真的会看到的日志,不能留)
|
||||
|
||||
- [ ] **Step 2: 编译检查**
|
||||
|
||||
@@ -2660,6 +2666,10 @@ rm -r Assets/_Game/Scripts/Enemies/Boss/Patterns
|
||||
rm -f Assets/_Game/Scripts/Enemies/Boss/Patterns.meta
|
||||
```
|
||||
|
||||
⚠️ `Patterns/` 是**独立程序集**(`BaseGames.Enemies.Boss.Patterns.asmdef`,`autoReferenced: true`)。
|
||||
已核实**零外部引用**(无任何 asmdef 的 `references` 含它),因此可随目录整包删除。
|
||||
删除后无需改动任何其他 asmdef。
|
||||
|
||||
- [ ] **Step 3: 编译 + 全量回归**
|
||||
|
||||
回 Unity 刷新。MCP `unity_get_compilation_errors` 期望 0 errors 0 warnings;`Run All` 期望全绿。
|
||||
|
||||
@@ -219,7 +219,7 @@ namespace BaseGames.AI
|
||||
{
|
||||
int CurrentPhase { get; }
|
||||
bool IsPhaseTransitioning { get; }
|
||||
bool ResourceFull { get; } // BossResource 满值;无资源组件时恒 false
|
||||
bool ResourceFull { get; } // BossResource 满值;未挂该组件即抛(见下)
|
||||
void BeginPhaseTransition(int targetPhase, float invincibleDuration);
|
||||
|
||||
// 竞技场锚点(§5.5)。归本 facet 而非黑板:见下方修订说明。
|
||||
@@ -242,6 +242,12 @@ namespace BaseGames.AI
|
||||
`EnemyBrainContext.Boss => _boss ?? throw new InvalidOperationException(...)`。
|
||||
按 CLAUDE.md 第 6 条:小怪图误用它必须崩,不能返回一个空对象把问题盖住。
|
||||
|
||||
> 修订(2026-07-30,Task 1+2 代码审查):`ResourceFull` 初稿定为「无资源组件时恒 false」,
|
||||
> **已改为未挂 `BossResource` 时显式抛**。原设计是同一条第 6 条禁止的下游兜底——
|
||||
> 图上挂了 `When(x => x.Boss.ResourceFull)` 边、预制体却漏挂组件时,那条边会永远不成立且零报错。
|
||||
> 与紧邻的 `Boss` facet、以及 §5.5 的 `AnchorAt` 保持同一失败语义:**Boss 专属 facet 的每个成员,
|
||||
> 在其依赖组件缺失时一律显式抛,不返回默认值。**
|
||||
|
||||
`BossBase` 实现 `IBossControl`;`EnemyBrainContext` 在构造时 `_boss = enemy as BossBase`。
|
||||
|
||||
### 5.2 `BossPhaseAbilityGate`
|
||||
|
||||
Reference in New Issue
Block a user