feat(ai): 敌人感知↔状态模型——待机/警觉/追击/巡逻 + 可复用感知状态机

感知门面 EnemyBase.InChaseZone(追逐/aggro)/InVisionZone(视野/los,缺省回退aggro),纯查询;
转换逻辑归 AI 层: 新增可复用 PerceptionStateMachine(统一规则,HasAlert/视野缺省自动降级);
规则: 未发现进视野→警觉, 进追逐→追击(委托能力), 追击脱离视野→巡逻(永不回警觉,再进视野再警觉).
EnemyStatsSO.HasAlertState 勾选项; ContactChaseAbility 改纯执行器(退出由AI中断); E001 用可复用件.
PlayMode 验证四态转换全通过.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-09 15:10:39 +08:00
co-authored by Claude Opus 4.8
parent 150fadb72e
commit 6c27993e09
12 changed files with 166 additions and 69 deletions
@@ -45,6 +45,8 @@ namespace BaseGames.Enemies
[Min(0f)] public float DetectRange = 6f;
[Header("追击 & AI 阶段")]
[Tooltip("是否有警觉状态:勾选=未发现态进入视野先进警觉(朝向+警觉动画)再追击;不勾选=进入追逐感知直接追击")]
public bool HasAlertState = true;
[Tooltip("最大追击距离(m);超出后放弃追击切换搜查阶段")]
[Min(0f)] public float MaxChaseDistance = 15f;
[Tooltip("视线丢失判定超时(s);超过此时长无视线则切换搜查")]