docs(enemy): 写明 RushExit.Committed 防抖动的前提是能力 cooldown > 0
质量审查发现:Committed 的冷却门若遇上 cooldown==0 的能力, CanUseAbility 结束下一帧即恢复,Rush↔Rest 每帧抖动照旧出现。 这属能力侧配置错误,不在模块内兜底,纳入 AiDefinitionValidator 校验项。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -194,6 +194,12 @@ public enum RushExit
|
||||
一个枚举值同时决定「脱战边怎么写」和「进入条件带不带冷却门」,因为这两件事本就是同一语义的两面。
|
||||
**两个耦合 flag → 一个语义枚举**,是消除开关面板的实证。
|
||||
|
||||
> **`Committed` 的防抖动保证有一个前提**:所引用的冲锋能力自身 `cooldown > 0`。
|
||||
> `EnemyAbilityBase.CanUse` 是 `!_isRunning && !IsOnCooldown`,若 `EnemyAbilitySO.cooldown == 0`,
|
||||
> 能力结束的下一帧 `CanUseAbility` 就恢复为真,抖动照旧出现。这属于**能力侧的配置错误**,
|
||||
> 不在本模块内兜底(第 6 条),由 `AiDefinitionValidator` 显式报出(见 §6)。
|
||||
> 旧的 `PatrolBetweenChases` 路径有同样的弱点,本次不改变该前提,只是把它写明并纳入校验。
|
||||
|
||||
```csharp
|
||||
public sealed class RushEngagement : IEngagementModule
|
||||
{
|
||||
@@ -415,7 +421,7 @@ E003(战斗区激活才掉落)、E004(战斗触发才出场)将来需要
|
||||
|
||||
| 工具 | 作用 | 优先级 |
|
||||
|---|---|---|
|
||||
| `AiDefinitionValidator` | 接入 `SOValidationRunner`。以 `AssetDatabase.FindAssets("t:AiRecipeSO")` 枚举全部配方,校验:模块字段是否留空、`AbilityRef` 是否两侧同时非空、`ApproachAttackEngagement` 是否配了 `EnemyAttackSelector`。**唯一能防住 450+ 引用出错的东西** | 紧接本次 |
|
||||
| `AiDefinitionValidator` | 接入 `SOValidationRunner`。以 `AssetDatabase.FindAssets("t:AiRecipeSO")` 枚举全部配方,校验:模块字段是否留空、`AbilityRef` 是否两侧同时非空、`ApproachAttackEngagement` 是否配了 `EnemyAttackSelector`、**`RushExit.Committed` 所引用的能力 `cooldown` 是否 > 0**(见下)。**唯一能防住 450+ 引用出错的东西** | 紧接本次 |
|
||||
| `EnemyAiRecipeWizard` | 建配方资产的脚手架(CLAUDE.md 第 2 条:不裸建),按 `AssetFolderSpec` 定名定路径。**本次必须先有它**,E001 的配方资产才能合规产出 | 本次 |
|
||||
| `_definitionId` 下拉 Drawer | 定制路径(约 5%)从 `AiDefinitionRegistry.Ids` 取值,预制体上不再手打字符串 | 紧接本次 |
|
||||
| `AiGraphExporter` | 把 `AiGraph` 导出为 Mermaid(`Transition.Label` 已为此准备)。150 张图若不能一眼看懂就没人敢改 | 路线图 |
|
||||
|
||||
Reference in New Issue
Block a user