全文提要
敌人AI行为设计文档

敌人AI行为设计文档(Shadow Dungeon)

一、总体设计理念

本敌人AI采用“双层结构”:

  • Brain(决策层):负责“想做什么”

    • 计算怒气值(Aggro)
    • 选择攻击目标(玩家 / 同伴)
    • 判断是否脱战 / 回家
    • 输出期望状态(DesiredState)
  • StateMachine(执行层):负责“怎么做”

    • 播放动画
    • 控制移动
    • 设置MVTarget
    • 播放特效
    • 到达判定

核心目标:

  1. 默认优先攻击距离更近的目标(玩家或同伴)
  2. 当玩家与同伴距离差不大,且敌人怒气值较高时,倾向优先攻击玩家(防止玩家拿同伴当肉盾)
  3. 怒气值受:
    • 距离出生点
    • 距离目标
    • 受击刺激
      共同影响
  4. 具有软脱战与硬脱战双保险机制
  5. 防止目标频繁切换抖动

二、决策刷新频率

DecisionInterval = 0.15f

敌人大脑每 0.15 秒重新计算一次:

  • 怒气值
  • 目标评分
  • 期望状态

不会每帧计算,避免性能浪费与抖动。


三、怒气系统(Aggro 0~1)

怒气代表敌人当前战斗意愿强度。

Aggro ≈ 出生点意愿 × 追击意愿 + 受击加成


1️⃣ 出生点意愿(Leash系统)

LeashFullDist = 2.5f​LeashZeroDist = 15f

  • 距离出生点 ≤ 2.5m:
    敌人“在家附近”,意愿接近 1(勇猛)
  • 距离出生点 ≥ 15m:
    敌人“离家过远”,意愿接近 0(怂)

距离在两者之间线性插值衰减。


2️⃣ 追击意愿(Chase系统)

ChaseFullDist = 4.0f​ChaseZeroDist = 11.0f

  • 距离目标 ≤ 4m:
    追击意愿接近 1(很积极)
  • 距离目标 ≥ 11m:
    追击意愿接近 0(懒得追)

同样线性衰减。


3️⃣ 怒气低阈值(软脱战)

AggroGiveUpThreshold = 0.15f

当怒气低于此值:

  • 倾向放弃目标
  • 进入 Return 或 Idle
  • 不会立即攻击

4️⃣ 受击刺激系统

HitBoostAdd = 0.25f
BoostDecayPerSec = 0.15f

被攻击时:

  • 怒气立即 +0.25

之后每秒衰减 0.15

效果:

  • 被风筝时不会马上怂
  • 但也不会无限愤怒

5️⃣ 回家锁定

ReturnLockTime = 1.2f

脱战后 1.2 秒内:

  • 不允许重新索敌
  • 防止来回横跳

6️⃣ 软回家倾向

SoftReturnDistFromPoint = 6.0f

当怒气低于阈值时:

  • 如果距离出生点 > 6m
    → 倾向进入 Return(回家)
  • 如果距离出生点 ≤ 6m
    → 可以 Idle 原地冷静

四、目标选择系统(玩家 vs 同伴)

目标通过评分系统决定。


1️⃣ 距离评分

MaxConsiderDist = 10.0f

评分公式:

distScore = 1 - InverseLerp(0, MaxConsiderDist, dist)

越近分数越高。


2️⃣ 玩家基础优先级

PlayerBasePriority = 0.05f

用于完全平分时的微小倾向。

数值必须小,否则会变成“永远优先打玩家”。


3️⃣ 玩家偏置机制(防肉盾系统)

PlayerBiasMax = 0.35f
GapPreferStart = 0.2f
GapPreferEnd = 1.0f

逻辑:

当:

  • 敌人怒气高
  • 玩家和同伴距离差很小

则给予玩家额外评分加成。

距离差 ≤ 0.2m:
→ 玩家偏置接近最大

距离差 ≥ 1.0m:
→ 不给额外偏置

这样实现:

  • 玩家 2m
  • 同伴 1.8m
  • 怒气高

敌人可能仍然选择玩家。

但如果:

  • 玩家 4m
  • 同伴 1m

则仍然优先同伴。


4️⃣ 目标切换滞回

SwitchMargin = 0.10f

新目标必须比当前目标评分高 0.1 才允许切换。

防止:

  • 玩家来回晃动
  • 同伴插入瞬间抢仇恨
  • 目标频繁抖动

五、兜底安全机制


1️⃣ 强制脱战距离(防止被拉飞)

GiveUpDistanceFromPoint = 16.0f

超过此距离:

  • 立即清目标
  • 强制 Return

2️⃣ 强制目标放弃距离

MaxTargetDistanceHard = 14.0f
MaxTargetDistanceHardTime = 1.5f

目标如果超过 14m 且持续 1.5 秒:

→ 强制脱战

防止极限拉扯卡边界。


3️⃣ 回家到达判定

ArriveDist = 1f

距离随机回家点 ≤ 1m:
→ 切 Idle


六、完整行为流程总结

  1. Brain 每 0.15 秒计算:

    • 怒气
    • 目标评分
    • DesiredState
  2. 如果怒气高:

    • 进入 Walk / Attack
    • 优先攻击高评分目标
  3. 如果怒气低:

    • 若离家远 → Return
    • 若离家近 → Idle
  4. Return 状态:

    • 随机生成回家点
    • 到达后 Idle
  5. 被攻击:

    • 怒气瞬间提升
    • 延迟衰减
  6. 硬拉绳触发:

    • 直接 Return
  7. 死亡:

    • 进入 Die 状态

七、最终AI风格特征

  • 不蠢:会根据距离判断优先级
  • 不呆:怒气会波动
  • 不容易被风筝
  • 不会无限追击
  • 不会来回横跳
  • 不会完全叠在出生点
  • 不会被同伴无限肉盾

这套AI是典型 ARPG 级别行为模型,
在复杂度与可控性之间取得了很好的平衡。