Components & assets#
Every APS component you can add to an actor, every asset type you can create, and every sense, with all their settings. All components are listed under Add in the Components panel: type aps.
Components#
APS Core#
The Perception Profile this AI uses: everything it perceives and how sharply. Set it in the Details panel; while playing, use Set Profile.
Changes applied to this one agent's copy of the profile.
Leave empty and the agent shares the profile asset directly, which costs nothing. Add an entry and this agent gets a private resolved copy.
Optional cost controls applied on top of the profile. Leave empty for full quality. Changing this never resets what the AI believes — that is the whole reason it is separate from the profile.
Show this AI with the APS Visualizer. Its actor is spawned at Begin Play and removed with the AI. Off: nothing is shown and nothing is spent on it.
The Visualizer to spawn: the plugin's BP_APSVisualizer by default. Make a child Blueprint of it to restyle it, or any actor of your own that reads the View nodes.
Keep the sounds this AI hears for Get Recent Sounds. On by itself while a Visualizer is shown or On Sound Heard is bound; working out how loud each sound arrived costs a few traces per sound, so it is otherwise skipped.
Stop every sense: nothing new is perceived while paused, and beliefs fade as they would with nothing in view. For watching memory and decay on their own.
APS Perception Listener#
No settings of its own: add it and it works.
APS Target Component#
Points the AI traces against to decide how exposed this actor is. Socket names are resolved on the owner's skeletal mesh; entries with no socket fall back to their local-space Offset.
Leave empty to inherit the observing AI's profile defaults.
How visible this actor is, 0 to 1: camouflage, tall grass, a cloak. 0 makes it invisible to sight.
Current posture. Drives how many sample points must be visible to register.
Work out the posture automatically: an APSStance Provider if the actor has one, else the Character's crouch.
How lit this actor is, 0 to 1, from your own light gem: it wins over everything. -1 lets APS work it out.
Register the owner as perceivable on BeginPlay so AI can find it with no extra setup.
APS Relationship#
A team id (Unreal's Generic Team Id, from the target or its controller) and the relationship it means.
An actor class and the relationship it means. Class rules win over team rules.
Default when no rule matches.
APS Environment#
Sphere of influence around the owning actor, in cm.
Higher wins where volumes overlap. Equal priorities resolve to whichever is nearer its own centre, so a small volume inside a large one takes effect.
Inside this volume, use Light Level instead of the world's light.
0 is pitch dark, 1 is full daylight.
Inside this volume, use Rain Intensity instead of the world's rain.
Rain inside this volume, 0 (dry) to 1 (downpour). Rain shortens vision, hearing and smell.
Inside this volume, use this Wind Direction and Wind Speed instead of the world's wind.
The way the wind blows inside this volume. Smell uses it.
How hard the wind blows inside this volume.
Inside this volume, use Is Indoors instead of the world's setting.
Indoors concentrates scent and shelters from wind.
Smoke, fog, dust. 0.3 means vision reaches a third as far in here.
A crowded market or a running generator. Below 1 makes it harder to hear anything specific; above 1 models a room that carries sound.
How far smell reaches inside this volume: 1 changes nothing, 0.5 is half as far, 2 is twice as far.
APS Signature#
The traits an observer can perceive, subject to how good a look they got.
Ships with a plausible starter set so the component does something the moment it is added. Replace the values with your own.
APS Observer#
Who this AI reports to. Entries are scoped per faction, so two factions hunting the same person do not share what they have worked out.
How reports travel. Direct is instant and complete; anything else costs time and detail, and can be cut off before it lands.
Belief required before this AI is willing to say anything. Below it, the AI has a suspicion rather than a sighting.
Seconds between reports about the same target, so a sustained sighting is an update rather than a flood.
Distance at which a look is as good as it gets (cm). Closer than this adds nothing; further degrades toward noticing only the obvious.
Beyond this, no describable detail is made out at all (cm).
Alert added to the faction each time this AI files a report.
Notice traces left in the world — bodies, blood, forced locks. Off makes this AI blind to evidence without changing anything else it does.
Also file evidence with the faction. Off keeps the discovery private to the AI that found it — it knows, its organisation does not.
APS Evidence#
What kind of trace this is — "Body", "Blood", "ForcedLock", "Footprints". Your vocabulary; the plugin attaches no meaning to any of them.
How obvious this is (0 to 1). 1 is a body in a corridor; 0.2 is a scuff mark.
An observer must perceive it at least this well before it registers, so subtle traces need a closer, longer look — and a hurried search misses them, which is the behaviour that makes searching feel like searching.
How strongly discovering this should register, (0 to 1). Feeds the confidence of the location belief it produces.
Seconds before this fades from the world on its own. 0 = it stays until something removes it. Blood dries; a body does not tidy itself away.
Who caused it, if the game knows. Carried into the finder's memory, so "this was them" is available without the AI having witnessed anything.
Which way it suggests they went. Zero when it says nothing about direction.
Register this actor as perceivable on BeginPlay, so AI can find it with no further setup. Turn off if your project registers it another way.
APS Search#
Grid resolution in cm. Smaller is more precise and costs more cells.
Half-width of the grid in cells. 20 at 300 cm covers a 120 m square.
How fast the target is assumed able to move, cm/s. This is what turns elapsed time into a search area — set it near your player's sprint speed.
How close the searcher must get before a cell counts as checked (cm).
Assets#
Create these in the Content Browser: right-click, Miscellaneous → Data Asset, and pick the class.
Perception Profile#
APS Quality Profile#
Multiplier on the profile's Base Update Interval. Above 1 means the whole perception pass runs less often; below 1 makes it more responsive.
Multiplies every sense's update interval: thin out vision without slowing the rest.
Hard cap on vision sample points per target, which is the single biggest trace cost in the system. 0 leaves the profile's Vision Sample Count alone.
This only ever lowers the count — a quality asset cannot make an agent more expensive than its profile asked for.
Skip the per-target light and sun-shadow trace and use the world's light. This changes stealth: a target in shadow reads as lit. Only for AI nobody watches closely.
Sound Type Definition#
The sound's name. On AI Hear passes it as the sound type's name, so you can branch on it, and it becomes part of the sound's stimulus tag (Stimulus.Sound.<name>).
What made the sound: Enemy, Friendly, Animal, Environment or Custom. A Sound Filter Profile can accept only some categories.
How alarming the sound is: Whisper, Normal, Loud or Explosive. A Sound Filter Profile can ignore sounds below a level.
Base loudness. 1.0=normal footstep, 3.0=gunshot, 0.3=whisper.
Max detection range (cm). Footstep=800, Gunshot=4000, Explosion=10000.
Does nothing in APS 3.0. No code reads it: how precisely a sound is placed comes from Location Accuracy Override (or the distance-based default).
How precisely a hearer places this sound, 0 to 1: 0.9 a gunshot, 0.2 a distant thud. 0 works it out from the distance.
Does nothing in APS 3.0. No code reads it: when more than Max Pending per Tick sounds of one type arrive in a tick, the quietest is replaced by a louder one.
AI at a higher (cheaper) level of detail tier ignore this sound: 1 for a footstep, 3 for a gunshot, 4 for an explosion everyone should hear.
How many sounds of this type wait for an AI per update. Past that, the quietest is replaced by a louder one.
Sound Filter Profile#
False = hear everything. True = apply filters below.
Sound categories this AI reacts to. Empty list = completely deaf.
Minimum alert level. Whisper=react to all sounds. Loud=only gunshots+. Explosive=only explosions.
Loudness multiplier. 1.0=normal, 2.0=sensitive ears (dog), 0.5=hard of hearing.
Ignore sounds from the AI's own team (its Generic Team Id, or its controller's; for a projectile, whoever launched it).
Pain Type Definition#
A readable name for this pain type, for your own UI.
A colour for this pain type, for your own UI or debug view.
How much of the level is lost per second, in a straight line: 0.05 lingers (bleeding), 0.2 fades (burning), 1 is quick (a stun). 0 never fades: clear it with Clear Pain from Definition.
Which senses this pain dulls, and how much: each entry is a sense and an effect from 0 to 1. At full pain, an effect of 1 takes that sense down to its floor.
The highest this pain can reach, 0 to 1, however many reports land.
Above 0, every report adds this instead of the amount passed: for all-or-nothing pain like a flash. 0 uses the amount passed.
Senses#
A profile lists the senses its AI has in Sense Classes. Settings shared by every sense live on the profile; the settings below belong to one sense: to change them, make a Blueprint child of the sense (right-click it in the class picker, or Blueprint Class and search its name), set them in its Class Defaults, and put your child class in the profile's Sense Classes instead.
Every sense#
Seconds between evaluations of this sense. Overridden per-profile by Sense Intervals.
Furthest this sense can reach (cm). Feeds the candidate-gathering radius, so a sense that reaches further than vision must say so or its targets are never even considered. 0 means it adds nothing to the gather range.
Seconds after this sense stops reporting before the target can be lost.
True = jump straight to Lost once grace expires, the way vision does when a target steps behind a wall. False = fade down through the states.
Reason written to the belief record when this sense is the one that lost the target. Behaviour trees read it to decide how to search.
Stimulus tag prefixes this sense subscribes to. Prefix matched, so "Stimulus.Sound" receives "Stimulus.Sound.Gunshot". Empty = opt out.
Damage Sense#
Echolocation Sense#
Hearing Sense#
Pain Sense#
Smell Sense#
Maximum range at which this sense can detect targets (cm). Much shorter than vision or hearing; smell is close-range.
This sense's own wind: the way the air moves (1, 0, 0 carries scent toward +X). (0, 0, 0) uses the world's wind (Set Wind State, or an APS Environment).
How much stronger the scent is when the wind carries it straight to the AI: 2 is twice as strong.
Base scent intensity of targets. Increase for "strongly scented" targets (animals, sewage, explosives) or reduce for neutral/masked targets. This is the noise equivalent for smell: higher = easier to detect.
Divides the scent intensity: lower is more sensitive.
Absorption per wall crossing. Walls partially block scent (lower than hearing by default, since scent can seep under doors).
How fast scent confidence builds per second when target is in range.
How fast scent confidence decays per second when target leaves range.
Touch Sense#
Does nothing in APS 3.0. Overwritten every tick by the profile's Touch Max Impulse for Full Strength, unless that is 0.
Confidence multiplier per contact type. Lets you tune impact per type in the asset.
Does nothing in APS 3.0. Overwritten every tick by the profile's Touch Persistent Accumulation Rate, unless that is 0.
Does nothing in APS 3.0. Not used: the profile's Touch Max Persistent Bonus always sets the cap.