AI感知:Stimulus 是观察,不是攻击目标
自动关联目录:AI感知:Stimulus 是观察,不是攻击目标
核心判断:
FAIStimulus只能证明某个 Sense 在某时刻观察到了什么。它不能直接证明目标仍存活、可达、可攻击,也不能替代仇恨、任务阵营和攻击槽位规则。
一、业务冲突:发现要灵敏,目标却不能反复抖动
敌人需要响应视野、声音、嘲讽和强制揭示,同时还要处理脱战半径、遮挡、玩家失败、隐身与换区。若把一次感知回调直接写入 TargetActor,短暂遮挡会频繁切换目标;若把旧目标永久保留,又会追逐已失效对象。
二、实际实现:UE Perception 事件驱动,但事实层被跳过
现有实现按角色配置 Sight 与 Hearing,利用 SightRadius/LoseSightRadius 的滞回减少边界抖动;OnTargetPerceptionUpdated 在成功感知时加入弱引用候选,在丢失时移除。声音、揭示和嘲讽统一通过 FAINoiseEvent 与 Tag 注入 Perception System,避免每只 AI 主动扫描全场。
但重新配置感知时会直接 ForgetAll,可能在参数热更新后制造整批“丢失再发现”;通用声音通道同时承载物理听觉和玩法命令,接收方必须靠 Tag 猜语义。候选列表只保存 Actor 引用,没有观察时间、来源、最后位置、目标代际和失效原因,Blackboard 最终拿到的是结论而不是可审计事实。
flowchart LR
S[Sight/Hearing/Gameplay Signal] --> I[Stimulus Ingest]
I --> F[Perception Fact Store]
F --> E[阵营/存活/任务资格]
E --> R[可达性与攻击范围]
R --> A[Target Assignment]
A --> B[Blackboard Target Handle]三、值得保留:用事件更新候选,而不是 Tick 扫描世界
UE Perception 已负责监听器注册、Sense 调度和 Stimulus 生命周期,业务层只响应变化,这比每只 AI 每帧 Overlap 或 GetAllActorsOfClass 更合理。弱引用候选避免阻止对象销毁,LoseSightRadius 也提供了最基本的空间滞回。
四、结构性缺陷:把 Hearing 当事件总线会污染感知语义
听觉事件的 Strength、位置和 MaxRange 本应描述声音事实;用 Tag 表达“强制揭示”或“附近嘲讽”虽然接入快,却难以区分可遮挡声音、无视遮挡命令和阵营广播。重新配置后的 ForgetAll 还会丢掉尚未过期的记忆。若 Blackboard 只存 Actor 指针,异步路径结果返回时无法判断它对应目标的哪一次观察。
五、目标设计:先形成带代际的 Perception Fact
每次回调更新 Fact Store,而不是直接改攻击目标。Fact 保存 Actor 稳定身份与 Incarnation、Sense、观察时刻、位置、置信度和过期时间;玩法信号走独立 Typed Event,不伪装成声音。目标选择读取 Fact 快照,并在提交前重新检查存活、阵营、状态与可达性。
void Ingest(Stimulus s)
{
TargetHandle h = Registry.Resolve(s.actor);
if (!h.IsCurrent()) return;
PerceptionFact& f = Facts.Upsert(h);
f.observationRevision++;
f.lastObservedAt = ServerClock::Now();
f.lastKnownLocation = s.location;
f.source = s.sense;
f.confidence = s.success ? 1.0f : DecayFrom(f.confidence);
f.expiresAt = Policy.Expiry(f);
Scheduler.MarkTargetSelectionDirty(ownerId);
}六、决策规则:观察、记忆、资格和目标分层
| 层 | 回答的问题 | 失效方式 |
|---|---|---|
| Stimulus | 刚才看见或听见了什么 | Sense 自身过期 |
| Perception Fact | 对该对象目前知道什么 | 时间衰减、对象换代 |
| Eligibility | 它能否成为玩法目标 | 阵营、存活、任务和状态变化 |
| Reachability | 当前能否接近或命中 | NavRevision、门和动态障碍变化 |
| Assignment | 现在由谁追谁 | 槽位、优先级、Lease 到期 |
| Blackboard Handle | 当前行为树消费什么 | Assignment Revision 被覆盖 |
已有实践正确利用了 UE Perception 的事件模型;真正需要升级的是在 Perception 与 Blackboard 之间补一层事实存储,让一次观察不会被误当成长期有效的攻击承诺。