Troubleshooting
Debug interaction issues by isolating the failed stage.
Interaction Engine has several independent stages: focus acquisition, prompt display, input prediction, server validation, confirmed execution, runtime state replication, widget updates, and persistence. When something fails, identify the first stage that stops working before changing unrelated settings.
Useful debug commands
Enable only the categories related to the problem you are investigating. Disable them again after testing to keep the Output Log readable.
| Command | Use when |
|---|---|
ie.Debug.Focus 1 |
Targets are not being acquired, the wrong actor receives focus, or slot selection feels incorrect. |
ie.Debug.Validation 1 |
The prompt appears, but the server rejects the interaction. |
ie.Debug.Net 1 |
Client and server behavior differ, or confirmed events do not arrive on clients. |
ie.Debug.Transaction 1 |
You need to follow a specific interaction from prediction to server confirmation or rejection. |
ie.Debug.Foliage.EventTrace 1 |
Foliage focus, proxy handoff, proxy events, or lifecycle resolution is not behaving as expected. |
ie.Debug.FoliageProxy 1 |
A foliage proxy spawns, hides, restores, or replicates incorrectly. |
ie.Debug.SaveLoad 1 |
Interactable or foliage proxy state does not restore correctly after loading. |
ie.Debug.Glyph 1 |
Input glyphs do not match the active device, input action, or selected gamepad style. |
Prompt never appears
- Confirm that the player pawn or character owns an
InteractionInteractorComponent. - Confirm that the target actor owns an
InteractionInteractableComponent, or that foliage is configured in the interactor's foliage database/data table. - Confirm that the player is within
TraceDistance,NearbyDetectionRadius, and the target's widget visibility distance. - Check collision channels, object responses, and line-of-sight rules used by the selected trace method.
- If using angle-based selection, review
ViewAngleDegrees, camera direction, and target bounds. - Enable
ie.Debug.Focus 1and verify whether the target is found, rejected, or never considered.
Prompt appears, but the interaction does not execute
- Confirm that the input calls
StartInteract,StopInteract, orSendHiton the same actor that owns the interactor component. - Confirm that the focused slot is enabled, not blocked, not on cooldown, and accepts the current interaction type.
- Check
CanInteractSlotWithReasonor rejection logs to see why the slot is denied. - For hold interactions, verify that input press calls start and input release calls stop.
- For damage or multi-hit interactions, verify the active damage type and the slot's required damage type.
- In multiplayer, bind gameplay to confirmed events, not only local prediction events.
Interaction works on the server but not on the client
This usually means local prediction happened, but the server rejected the interaction or the client is listening to the wrong event. Client-side visuals may react immediately, but gameplay results should come from confirmed events.
- Use
OnInteractionPredicted_LocalOnlyfor immediate local feedback only. - Use
OnInteractionStarted_Confirmed,OnInteractionCompleted_Confirmed, andOnInteractionCancelled_Confirmedfor authoritative gameplay. - Listen to
OnInteractionRejected_LocalOnlyto detect failed client attempts. - Enable
ie.Debug.Net 1,ie.Debug.Validation 1, andie.Debug.Transaction 1. - Check whether the server's trace/validation distance, line of sight, focused target, and focused slot match the client expectation.
Progress bar does not update
- Use
InteractionFocusWidgetBasefor the main prompt widget. - Use
InteractionRowWidgetBasefor each displayed slot row. - Confirm that each row has the correct
SlotID. - Confirm that
bAutoDiscoverRowsor manualRegisterInteractionRowsetup is working. - Confirm that
bAutoUpdateRegisteredRowsis enabled if you expect automatic progress updates. - Bind to
On Interaction Row Progress Updatedon the row widget when driving a custom progress bar.
Input glyph is missing or wrong
- Prefer setting
InputActionon the slot display settings. UseKeyLabelonly as fallback or legacy text. - Confirm that the input action is mapped in the active Enhanced Input mapping context.
- For gamepads, set the desired style with
Set Gamepad Glyph Style, or configureDefaultGamepadFallback. - Check whether the glyph database contains an entry for the resolved key and device/style.
- Enable
ie.Debug.Glyph 1to inspect resolved device type, key, and fallback behavior.
Foliage prompt appears, but proxy events do not fire
Foliage starts as a virtual focus target. The proxy actor is spawned only when the interaction begins or needs an actor-backed runtime state. Debug the handoff before changing Blueprint logic.
- Confirm that the foliage mesh has a matching entry in
FoliageDatabaseorFoliageDataTable. - Confirm that the entry has a valid
ProxyActorClasswith an interactable component. - Verify that the slot exists on the proxy after initialization.
- Use the proxy events such as
OnProxyReady,OnFoliageHoldStarted,OnFoliageHit, andOnFoliageCompleted. - If you want custom falling/chopping/dissolve timing, call
ResolveProxyLifecyclefrom Blueprint when the visual sequence is ready. - Enable
ie.Debug.Foliage.EventTrace 1,ie.Debug.FoliageProxy 1, andie.Debug.Transaction 1.
Foliage changes on the server but not on clients
- Make sure source instance visibility and proxy visibility are changed through the plugin's foliage/proxy APIs, not by local-only Blueprint changes.
- Confirm that the interaction is completed on the server and that clients receive confirmed events.
- Check whether the proxy is replicated and relevant to the clients that should see it.
- Use
HideSourceInstance,ShowSourceInstance,SetSourceInstanceHidden,HideProxy,ShowProxy, orSetProxyHiddeninstead of ad-hoc visibility changes. - Enable
ie.Debug.Net 1andie.Debug.FoliageProxy 1.
Save/load works for actors, but not for foliage
- Use
Store All Foliage Proxy SnapshotsandRestore All Foliage Proxy Snapshotsfor the recommended world-level foliage persistence flow. - Use the older
Store Foliage SnapshotsandRestore Foliage Snapshotsnodes only for legacy or per-interactor cases. - Run save and restore logic on the server in multiplayer.
- Confirm that the snapshot contains stable source instance data, source hidden state, proxy hidden state, and interactable state.
- If using World Partition or streaming, restore again after the relevant level/foliage source is loaded.
- Enable
ie.Debug.SaveLoad 1andie.Debug.Foliage.EventTrace 1.
Runtime slot changes do not replicate correctly
- Do not directly edit the static
Slotsarray afterBeginPlay. - Use the component API for runtime changes such as
SetSlotEnabled,SetSlotBlocked,SetSlotHealth,ApplyDamageToSlot,ResetSlot, and cooldown functions. - Remember that
SlotRuntimeStatesis the replicated runtime state path. - Perform authoritative runtime state changes on the server.
- Use
OnSlotsStateChangedor confirmed interaction events to refresh Blueprint UI and gameplay state.
UI attaches to the wrong position
- Confirm whether the actor uses an
Interaction Widget Anchor Component. - Review
FocusWidgetPlacementMode,WidgetRelativeOffset,FixedScreenPosition, andFixedScreenWidgetOffset. - For foliage, check the entry's widget placement settings because the widget may be shown before the proxy exists.
- For projected widgets, confirm that the target is inside the camera frustum and not behind the camera.
Diagnostic order
ie.Debug.Focus for acquisition, ie.Debug.Validation for rejection, ie.Debug.Net for multiplayer, or ie.Debug.Foliage.EventTrace for foliage.