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 的真实感来自记忆与反应,不是数值。
