feat(ai): 追击冲刺带冷却——CD 期巡逻,冷却结束仍在追逐区则再冲(PatrolBetweenChases) 按需求:冲刺打完 → CD 期切到巡逻(Move_Patrol) → 冷却结束且玩家仍在追逐区 → 再冲刺。 PerceptionStateMachine 加 opt-in 开关 PatrolBetweenChases: - Chase → Patrol When !IsAbilityRunning(chase):冲刺是 committed 冲锋,感知丢失 也不中途打断,打完(能力结束)即降巡逻。 - Idle/Patrol/Alert → Chase 加冷却门 CanUseAbility(chase):CD 中不回追击, 避免"CD 期在追逐区每帧 Chase↔Patrol 来回抖"(用户担心的错切/抖动)。 - 默认关:不影响其他敌人(leftAllZones 旧行为保留)。 E001CaoZhiAi 打开开关。追击能力保持单次冲刺不变,冷却=ABL_E001_Chase.cooldown(1s)。 测试:PerceptionStateMachineTests +5(CD 转换矩阵含"CD 期多帧不抖动"负例), FakeCombat 加可控 CanUse。全量 75/75 绿。PlayMode 实测循环 Move_Patrol(CD)→Chase(冲)→Move_Patrol,inChase 全程 true 亦不抖,0 报错。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
36 lines
1.5 KiB
C#
36 lines
1.5 KiB
C#
using BaseGames.AI;
|
|
|
|
namespace BaseGames.Enemies
|
|
{
|
|
/// <summary>
|
|
/// E001(草蛭)AI —— 纯决策层,复用 PerceptionStateMachine 的"待机/警觉/追击/巡逻"统一规则。
|
|
/// 只声明差异:每个状态触发哪个能力(待机=伪装静止、巡逻=游走、警觉=张口、追击=接触追击)。
|
|
/// AI 只决策(进哪个状态/转换条件/触发哪个能力);移动/朝向/停/速度/动画/伤害/阶段声明全部在能力里实现。
|
|
/// 依据 Docs/Game/Design/小怪设计-程序开发文档-01.md。
|
|
/// </summary>
|
|
[AiDefinition("E001")]
|
|
public sealed class E001CaoZhiAi : AiScript
|
|
{
|
|
protected override void Build(BrainBuilder b)
|
|
{
|
|
PerceptionStateMachine.Add(b, new PerceptionStateMachine.Config
|
|
{
|
|
Idle = "Idle_Disguise",
|
|
Patrol = "Move_Patrol",
|
|
Alert = "Alert",
|
|
Chase = "Chase",
|
|
Death = "Death",
|
|
Entry = "Idle_Disguise",
|
|
Rest = "Move_Patrol",
|
|
|
|
IdleMode = LocomotionMode.Idle,
|
|
PatrolMode = LocomotionMode.Patrol,
|
|
AlertMode = LocomotionMode.Face,
|
|
ChaseAbilityId = "e001_chase",
|
|
PatrolBetweenChases = true, // 冲刺=带冷却的冲锋:冲完→CD 期巡逻→冷却结束仍在追逐区→再冲
|
|
// DeathAbilityId 留空:死亡演出走物理状态机(EnemyBase.PerformDeath)
|
|
});
|
|
}
|
|
}
|
|
}
|