Events#
Two kinds of events. Bind the first kind: select the component, and at the bottom of its Details click + next to the event. Override the second kind in a Blueprint made from the class (a Listener, a policy, a sense), from the Functions list's Override menu.
Events you bind#
APS Core#
Fires each time vision (or echolocation) reports the target: about every 0.15 s while it is seen.
Fires on each hearing update that hears the target: when a sound of theirs arrives, and again on each update after it while the built-up noise lasts. On those build-up updates Sound Type Name is None and Location is where the target is now, not where the sound was. For one event per sound, use On Sound Heard.
Fires each time smell reports the target: about every 0.25 s while it smells them.
Fires when touch reports a contact from the target.
Fires when vibration reports something: a target's footsteps, or a vibration at a place. No line of sight needed.
A target entered Suspected: from Undetected, or stepping down from Detected.
A target entered Detected: from Suspected, stepping down from Tracked, or found again after Lost or Remembered.
A target entered Tracked: high, sustained confidence.
A target entered Lost. Gives where it was last placed, where it is predicted to be, and the cover it went behind.
A lost target faded to Remembered. Age Seconds is the time since the AI first noticed it.
The AI let go of a target: it Expired, or dropped back to Undetected.
A target's threat level changed.
A target's threat rose to High or Critical.
No actor is left at Suspected, Detected, Tracked or Lost (Get Active Target Count fell to 0): time to stand down.
The AI's overall alert level changed (Unaware, Peripheral, Suspicious, Alerted, Fully Aware).
Fires for each Report Pain from Definition, on the next update: the pain asset, and its level after that report.
Fires on every Unreal damage call that hits the AI (Apply Damage, Apply Point Damage, Apply Radial Damage), with or without Damage Sense: who did it, how much, the damage type's short tag and where.
Fires on every lifecycle state change — provides old and new state.
The dominant emotion changed: gives the old one and the new one.
The AI's focus moved to a different target. Old Target is none the first time. The new target can be one the AI only suspects, so check its state before reacting; to start a chase, use On AI Detect.
A squadmate told this AI something new: a shared target, or a place and threat (Broadcast Alert to Squad). It doesn't fire again for the same news.
Fires when this AI is assigned a combat role.
Fires for every sound this AI hears, after its sound filter: where it came from, how loud it was made and how loud it arrived, the distance, the walls between and whether the path was clear. A noise with no maker is included (No Maker). Once per sound per perception pass.
Fires on clients when a new replicated summary arrives. Not on a listen-server host or in single player.
Fires once when confidence in a target reaches Telegraph Threshold, before the AI commits; again only after it has let that target go. Put a huh? bark or a head turn here.
A belief about a place (a noise nobody made, a blast) changed state.
APSKnowledge Subsystem#
Fires when a report reaches a faction: a new entry, or one merged into an existing entry. Gives the faction and the entry's id.
Fires when a faction's alert level changes: raised, set, or noticeably decayed over time. Gives the faction and its new alert, 0 to 1.
Events you override#
APS Perception Listener#
Put your reactions in a Blueprint made from APS Perception Listener and add it to every AI that should share them. These are the events you implement there.
Fires each time vision (or echolocation) reports the target: about every 0.15 s while it is seen.
Fires on each hearing update that hears the target: when a sound of theirs arrives, and again on each update after it while the built-up noise lasts. On those build-up updates Sound Type Name is None and Location is where the target is now, not where the sound was. For one event per sound, use On Sound Heard.
Fires each time smell reports the target: about every 0.25 s while it smells them.
Fires when touch reports a contact from the target.
Fires when vibration reports something: a target's footsteps, or a vibration at a place. No line of sight needed.
A target entered Suspected: from Undetected, or stepping down from Detected.
A target entered Detected: from Suspected, stepping down from Tracked, or found again after Lost or Remembered.
A target entered Tracked: high, sustained confidence.
A target entered Lost. Gives where it was last placed, where it is predicted to be, and the cover it went behind.
A lost target faded to Remembered. Age Seconds is the time since the AI first noticed it.
The AI let go of a target: it Expired, or dropped back to Undetected.
A target's threat level changed.
No actor is left at Suspected, Detected, Tracked or Lost (Get Active Target Count fell to 0): time to stand down.
Overall awareness level changed (Unaware / Peripheral / Suspicious / Alerted / Fully Aware).
Fires for each Report Pain from Definition, on the next update: Pain Type (the asset's name), Pain Level (after that report), Threshold Crossed (always -1, kept for older Blueprints) and Pain Def (the asset).
Fires on every Unreal damage call that hits the AI (Apply Damage, Apply Point Damage, Apply Radial Damage), with or without Damage Sense: who did it, how much, the damage type's short tag and where.
A squadmate told this AI something new: a shared target, or a place and threat (Broadcast Alert to Squad). It doesn't fire again for the same news.
Confidence about a target crossed Telegraph Threshold — the moment for a "huh?" bark or head-turn before the AI commits to full alert. Once per target.
The AI's focus moved to a different target. Old Target is none the first time. The new target can be one the AI only suspects, so check its state before reacting; to start a chase, use On AI Detect.
A belief about a place (a noise nobody made, a blast) changed state.
Sense Unit#
Override it in your own sense: judge one target and fill in Out Result (Is Active, Confidence, Estimated Location, Location Accuracy, Sense ID).
Override it in your own sense: return its name, for example Thermal. It is what Get Sense Contributions and the Visualizer show.
APS Observer#
Fires the first time this AI notices a given piece of evidence.
By the time it fires, a belief about the place and a memory have already been recorded — so a handler can read them. What it MEANS is yours: raise the alarm, investigate quietly, or step over it.
APS Fusion Policy#
Make a Blueprint child of this class and set it on the profile's Fusion Policy to decide how senses combine.
Override it: combine this update's sense readings into one confidence, 0 to 1. Samples has one entry per sense, in the profile's order (Sense ID, Confidence, Weight, Is Active). Corroboration Bonus is the profile's, for reference.
APS Threat Policy#
Make a Blueprint child and set it on the profile's Threat Policy to score threats your way.
Override it: return how dangerous the target is, 0 to 1. Record is everything the AI believes about the target; Relationship comes from its APS Relationship. APS still turns the score into a level with the profile's thresholds, and keeps Friendly, Teammate and Expired targets at None.
APS Attention Policy#
Make a Blueprint child and set it on the profile's Attention Policy to choose what the AI attends to.
Override it: return the target the AI should commit to, Current to keep it, or none. Candidates are the actors it holds beliefs about, best first. Time on Current is how long it has held Current; Stickiness Time and Switch Threshold are the profile's, so you can honour them. It replaces the built-in rule entirely.
APS Significance Policy#
Make a Blueprint child and set it on the APS subsystem to rank which AI get full-quality updates.
Override it: return how important this AI is, 0 to 1. More important AI update more often and win the frame budget. Nearest Viewer Dist is the distance to the closest player camera in cm (0 on a dedicated server); Is Engaged is true while its awareness is Suspicious or higher; Awareness is 0 (Unaware) to 4 (Fully Aware).
APSHealth Provider#
An interface: implement it on your character so APS can read its health without knowing your health system.
Remaining health as a fraction, 1 for untouched and 0 for dead. Values outside that range are clamped.
APSStance Provider#
An interface: implement it on your character so APS can read its stance (standing, crouching, prone) from your own movement code.
Implement it to tell APS the posture: Standing, Crouched or Prone.