敌人AI行为设计文档(Shadow Dungeon)
一、总体设计理念
本敌人AI采用“双层结构”:
-
Brain(决策层):负责“想做什么”
- 计算怒气值(Aggro)
- 选择攻击目标(玩家 / 同伴)
- 判断是否脱战 / 回家
- 输出期望状态(DesiredState)
-
StateMachine(执行层):负责“怎么做”
- 播放动画
- 控制移动
- 设置MVTarget
- 播放特效
- 到达判定
核心目标:
- 默认优先攻击距离更近的目标(玩家或同伴)
- 当玩家与同伴距离差不大,且敌人怒气值较高时,倾向优先攻击玩家(防止玩家拿同伴当肉盾)
- 怒气值受:
- 距离出生点
- 距离目标
- 受击刺激
共同影响
- 具有软脱战与硬脱战双保险机制
- 防止目标频繁切换抖动
二、决策刷新频率
DecisionInterval = 0.15f
敌人大脑每 0.15 秒重新计算一次:
- 怒气值
- 目标评分
- 期望状态
不会每帧计算,避免性能浪费与抖动。
三、怒气系统(Aggro 0~1)
怒气代表敌人当前战斗意愿强度。
Aggro ≈ 出生点意愿 × 追击意愿 + 受击加成
1️⃣ 出生点意愿(Leash系统)
LeashFullDist = 2.5fLeashZeroDist = 15f
- 距离出生点 ≤ 2.5m:
敌人“在家附近”,意愿接近 1(勇猛) - 距离出生点 ≥ 15m:
敌人“离家过远”,意愿接近 0(怂)
距离在两者之间线性插值衰减。
2️⃣ 追击意愿(Chase系统)
ChaseFullDist = 4.0fChaseZeroDist = 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
六、完整行为流程总结
-
Brain 每 0.15 秒计算:
- 怒气
- 目标评分
- DesiredState
-
如果怒气高:
- 进入 Walk / Attack
- 优先攻击高评分目标
-
如果怒气低:
- 若离家远 → Return
- 若离家近 → Idle
-
Return 状态:
- 随机生成回家点
- 到达后 Idle
-
被攻击:
- 怒气瞬间提升
- 延迟衰减
-
硬拉绳触发:
- 直接 Return
-
死亡:
- 进入 Die 状态
七、最终AI风格特征
- 不蠢:会根据距离判断优先级
- 不呆:怒气会波动
- 不容易被风筝
- 不会无限追击
- 不会来回横跳
- 不会完全叠在出生点
- 不会被同伴无限肉盾
这套AI是典型 ARPG 级别行为模型,
在复杂度与可控性之间取得了很好的平衡。
评论