4.2 AI 感知系统:给怪物装上五官

核心结论

怪物"聪明"与否,60% 取决于感知:能不能看见、听见、记住玩家。UE 的 AI 感知系统(AIPerception,官方文档 https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/ai-perception-in-unreal-engine-65fd)开箱即用,核心是三个配置:视觉、听觉、伤害感知,加上"记忆/遗忘"逻辑。

三种感知组件的配置

感知 配置要点 我的常用值
视觉 AI Sight 视锥(角度+距离)、失去视野 linger 120度、15m,linger 3s
听觉 AI Hearing 听觉半径 10m
伤害 AI Damage 被打就会感知 无脑配

视觉的进阶:给玩家配置 UAISense_Sight 的 stimuli source(PlayerCharacter 里加 AIStimuliSourceComponent),并开启"只感知 Pawn"避免把环境物体当目标。

感知的生命周期("记忆")

[看见玩家] -> Stimulus: Successfully Sensed -> 黑板 Target = Player
[玩家躲到掩体后] -> Stimulus: Lost Sight -> linger 3s 内 Target 还在
[3s 后] -> Target 清空,AI 回巡逻/idle
[期间 AI 移动到玩家最后位置] -- "搜点"行为(让 AI 更像人)

关键设计:不是"看不见就立刻忘",而是" linger + 到最后位置搜索 + 然后忘"。仅这一个细节,AI 的"智商感"提升一档。

与行为树的联动

事件 行为树反应
看见玩家 切"战斗子树"
失去玩家 切"搜索子树"
久找不到 回"巡逻子树"
听见声响 转头看一眼(插队任务)

实现:AIController 的 OnPerceptionUpdated -> 写黑板 -> 行为树用 Decorator(Blackboard Based Condition)订阅黑板。

常见坑与解法

坑 1:怪物"隔墙看人"

原因:视觉感知没开射线检测。

解法:感知配置的 Auto Success Range from Last Seen Location + 重要是让 Sight 走 collision 检测(Query Setting 用 Trace Channel,不是"看得见就感知")。

坑 2:所有怪同时发现玩家(蜂拥)

原因:感知是即时的,没"传递警觉"的设计。

解法: - 给"发现者"广播一个事件,附近怪进入警觉态(不是直接开战),需要自己再确认。 - 或在"团队感知"上直接用共享黑板(同一阵营 AIController 订阅同一份"警觉值",做小队协同)。

坑 3:感知调试痛苦

解法:AI 调试视图( -ShowDebug 或编辑器的 AI Debug):视觉锥实时画在屏幕上。感知没配对时一眼可见。

坑 4:感知的性能(50 个怪)

解法: - 感知频率配适(AIPerception 的更新间隔可以调,别用每帧)。 - 远距离/低相关性的怪用休眠(Actor Dormancy 或限量激活,见 0403)。 - 用 UAIPerceptionSystem::Update 的批量设置。

相关节点速查

  • 官方感知:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/ai-perception-in-unreal-engine-65fd
  • 刺激源:AIStimuliSourceComponent
  • 调试:AI 调试视图(编辑器 Play 时按快捷键)

心得:感知系统是"做了玩家感觉不到、没做玩家立刻觉得怪蠢"的系统。我做过最讨好的细节是"被发现的怪会互相喊话(播一个警觉语音)"——玩家说"这怪有人格"。AI 的真实感来自记忆与反应,不是数值。