Troubleshooting
Diagnose modes that do not switch, states that never arrive, focus that does not track, missing tags and dithering in Agentic Gameplay Camera
Troubleshooting
Check what is actually configured and what the log actually says before you retune values. Most of these have the same shape: the tag resolved, and then nothing was behind it.
The Camera Mode Never Changes
Symptoms: Set Camera Mode is called and the camera keeps the previous mode, or stays on the default.
- The tag is not registered. Type the tag into any gameplay tag picker. If it does not appear, it is not in the tag table — see Tags Are Missing below.
- No mode row is behind the tag. The tag resolves and the registry finds nothing, so the director keeps the previous mode and logs
not found in registry. Runlog LogAgenticCamera Verboseand read the import output. - No mode DataTable is configured. Project Settings → Game → Agentic Camera → Default Camera Mode DataTable is empty. Click Configure Shipped Defaults, then Validate All Tables.
A project that sets the Agentic Camera keys in its own DefaultGame.ini overrides the plugin's shipped defaults, which is the usual reason a table reads as unconfigured in a project that used to work.
log LogAgenticCamera Verbose
showflag.camerafrustum 1
Agentic.Camera.DebugLevel 2The camera director is a camera director on a camera asset, not a PlayerCameraManager. There is no PlayerCameraManagerClass to set. If you are following older notes that ask you to assign one, they predate this release.
The Camera State Never Changes
Symptoms: the character is sprinting, falling or crouching and the camera does not react.
- Nothing supplies the state. The plugin never derives states from movement — that guess would be wrong for someone's game. Your code must call
SetStateActive/AddState/RemoveState, or the pawn must implementIAgenticCameraProvider::GetCameraStates. With nothing supplying tags the container stays empty and this is working as designed. - No provider at all.
UpdateCameraState: No IAgenticCameraProvider on '<Actor>'in the log means the director found neither the component nor an interface implementation on the pawn. - The current mode has no config for that state. The tag is active, the mode has no matching state entry, so nothing overrides any parameter and it looks like nothing happened. Open the mode Data Asset and check its States array.
Print what the director is actually reading:
const FGameplayTagContainer States = CameraComp->GetActiveStates();
UE_LOG(LogTemp, Warning, TEXT("States: %s"), *States.ToString());A state that is present and still does nothing is case 3.
If a designer or a test left a state override on the component (SetStateOverride), the component reports exactly those states and ignores what gameplay pushes — pushes still land and reappear when the override clears. HasStateOverride() answers this in one call.
Focus or Lock-On Does Nothing
Symptoms: the Focus modifier is on the mode, a target is set, and the camera does not track.
- The optional Agentic Targeting plugin is not installed or enabled. Focus and Awareness need a target source. The camera itself runs fine without it — those two modifiers simply have nothing to track.
- The character does not implement
IAgenticTargetProvider. With that plugin present, the character must implement its provider interface and delegate to its targeting component. - There is no targeting component on the character, so the provider has nothing to return.
- Focus mode mismatch.
HardLockrequires an active lock-on target;Softtracks the best target in range. AHardLockshot with no target does nothing by design. - The lock-on state is absent. Check whether
Agentic.Camera.State.LockOnis in the state container. If nothing is broadcasting a target, Focus correctly treats the situation as "no target".
Turn on the modifier's own bDebugDraw to see the target indicator and the lock-on line, or Agentic.Camera.DebugLevel 2 for everything at once.
Awareness Does Not Pull Back Far Enough
Awareness already drives arm pullback, height rise, FOV widening and lateral framing offset — and collision runs after the modifiers, so wall and ground clipping is handled for you. Tune the parameters rather than the code:
MaxArmLength— the upper bound on pullbackArmWeight— how much of that range actually gets usedMaxHeightOffset— the optional tactical riseMaxFOV/FOVWeight— how much FOV widens on top of the pullbackFramingOffsetWeight— the lateral slide that keeps threats in frame
Also check MinThreatsToActivate: at the default of 2 a single enemy will never trigger it.
A Modifier Parameter Is Ignored
Symptoms: you set a value in JSON, the import succeeded, and the modifier behaves as though the value were never there.
Read the import report. An unresolved key is reported as unknown, and the modifier keeps its C++ default rather than guessing.
The common cause is a missing Params. prefix on Constraints and Shake, whose settings live in an inner struct. "PitchMin" does not resolve; "Params.PitchMin" does. The generated /AgenticGameplayCamera/Shared/AgenticCameraSchema.json is the authoritative list of key names — regenerate it with Validate All Camera Tables.
Dithering Does Not Fade Anything
- No transparency material on the mode's Dithering config. The plugin ships
/AgenticGameplayCamera/Shared/Materials/M_CameraDither_Defaultand every bundled mode references it, so a custom mode is the likely culprit. The log says so explicitly:Dithering is enabled on '<ModeName>' but no TransparencyMaterial is set. - The probe radius is too small. It is the radius of the sphere trace between camera and pivot. Below about 10 the sweep can miss thin walls; the default is 15.
- The mesh type is not covered. The override material is applied to static mesh components only. Skeletal meshes and instanced static meshes are not dithered through.
To change the look, duplicate the default material into your own content and adjust its dither parameters or base colour, then assign your copy on the modes you want.
Tags Are Missing from the Picker
The plugin registers its own tag search path at module startup — the same mechanism Game Feature plugins use — so a normal installation needs no edits to your project's DefaultGameplayTags.ini.
If Agentic.Camera tags do not appear:
- Confirm the plugin is enabled in Edit → Plugins and restart the editor.
- Enable Show Plugin Content in the Content Browser and confirm the
/AgenticGameplayCamera/mount is present. - For a tag you added: the order matters. Add the row to the tag CSV first, reimport that DataTable, and only then reference the tag from a modifier or mode row. A tag referenced before it exists shows red.
An empty tag selection is not equivalent to the tag you meant. Never treat one as the other when reporting a problem.
Shipped Content Is Missing from the Content Browser
Enable Show Plugin Content in the Content Browser's settings. Everything under /AgenticGameplayCamera/ is hidden without it, including the mode Data Assets, the DataTables, the dither material, the shot flows and the Stage level.
The Debug Draw Does Not Appear
Agentic.Camera.DebugLevel is a cheat console variable, so it needs a context that allows cheats — the editor, PIE, or a Development build. The same switch exists as Show Debug Info in Project Settings.
A per-node bDebugDraw flag means "force this site on at full detail" regardless of the global level, so an unchecked flag does not suppress the global draw and vice versa. Sites are: a mode's Lag config, and the YawFollow, PitchFollow, Focus, Awareness, Constraints and correction entries. That is the complete list — there is no draw for anything not on it.
Everything drawn is also recorded to the Visual Logger under the AgenticCamera category, which is the better tool when the moment you care about has already passed.
Frame Cost Spikes on a Mode Switch
- Blend curves that are too long. A two-second blend with expensive modifier evaluation multiplies the cost.
- Rig rebuilds. A mode change builds a rig; a state change must not. If a state change is rebuilding, the state's values are not being written into the running rig's variables.
stat unit
stat cameraUnreal Insights gives the per-node picture when stat is not specific enough.
A Shot Flow Refuses to Start
Flow playback refuses rather than half-performing:
- A required role is unbound. Bind it explicitly, or register a subject for the role's default subject tag.
- No asset carries the tag. Flows are discovered from the Asset Registry by their
FlowTag; a tag no asset claims resolves to nothing. - The asset fails structural validation — no segments, an undeclared subject role, duplicate role names. The editor's data validation says which.
A segment that seems stuck is usually a Signal or External end waiting for exactly what it says: raise the signal, or call continue. Their duration values are estimates for seeking, never timeouts.
Need Help?
Ask in Discord. Include the Unreal Engine version, the plugin version, the active camera mode and state container, the relevant LogAgenticCamera output at Verbose, and whether the problem survives reopening the saved level. For a framing or coverage problem, the flow tag and what the trace reported are worth far more than a description of what it looked like.