Interactable reference
Interactable Component reference.
The InteractableComponent owns the target-side data for an interactive object: initial slot definitions,
replicated runtime slot state, object metadata, widgets, outline settings, respawn behavior, custom data,
save identity, and target-side events.
Runtime rule: configure Slots before BeginPlay. After BeginPlay, use the
dedicated runtime APIs such as SetSlotEnabled, SetSlotBlocked, ResetSlot,
SetSlotHealth, and StartSlotCooldown. Directly replacing the slot definition array at runtime is intentionally refused.
Slot definitions versus runtime slot state
Interaction Engine separates static slot setup from mutable gameplay state. Slots describes what actions the target exposes.
SlotRuntimeStates mirrors the changing state of those slots during play, such as enabled, blocked, health, cooldown,
completion, toggle, and in-progress values.
| Field | Purpose | Replication behavior |
Slots |
Initial slot definitions authored in the editor or assigned before BeginPlay. |
Replicates as initial setup data. Use it for design-time configuration, not ongoing runtime changes. |
SlotRuntimeStates |
Runtime-only state for each slot, including availability, health, cooldown, toggle, and completion data. |
Replicates through a FastArray for deterministic, low-churn multiplayer updates. |
Core fields
| Variable | What it does | When to change it |
bIsInteractable | Master enable/disable switch for the whole component. | Use when the entire object should become unavailable without editing each slot. |
InteractionTitle | Object-level title used by widgets and focus data. | Use for target identity, such as Chest, Workbench, or Ancient Door. |
InteractionDescription | Object-level descriptive text. | Use when the widget needs context beyond the selected slot prompt. |
InteractionDistanceOverride | Optional per-target interaction range override. A value of 0 uses the interactor's normal distance rules. | Use for oversized, tiny, or special objects that need custom reach. |
SelectionPriority | Priority used during automatic target selection. | Raise it when this target should win focus against nearby candidates. |
DistantIndicator | Optional icon shown at longer range before the main prompt becomes relevant. | Use for discoverable pickups, resources, doors, and objects the player should notice from farther away. |
OutlineSettings | Per-target focus outline configuration. | Use when this object should control its own CustomDepth/Stencil focus visuals. |
Save and persistence fields
| Variable | What it does | When to change it |
bRegisterForSave |
Registers this component with the interactable registry so it can be included by world-level save/load nodes. |
Leave enabled for persistent world objects. Disable for decorative, temporary, or runtime-only interactables that should not be saved. |
PersistentInteractableGuid |
Stable editor-stored identity used to match saved state back to the same interactable. |
Normally generated and maintained automatically. Avoid manually duplicating the same GUID across different placed actors. |
Recommended save flow: persistent placed interactables should keep
bRegisterForSave enabled and be saved through
Store All Interactable Snapshots /
Restore All Interactable Snapshots. See
Save and Persistence for the full workflow.
Respawn fields
| Variable | What it does | When to change it |
bShouldRespawn | Allows the interactable to become available again after completion. | Use for repeatable resources, reusable objects, or timed world resets. |
bAutoRespawnOnCompleted | Schedules respawn automatically when a completing slot finishes. | Disable when a specialized owner, such as a foliage proxy, controls the lifecycle manually. |
RespawnTimeMin | Minimum respawn delay. | Used only when respawn is enabled. |
RespawnTimeMax | Maximum respawn delay. | Use a value above the minimum when the reset should have variable timing. |
Widget fields
| Variable | What it does | When to change it |
WidgetDisplayMode | Controls when the main interaction widget can be shown. | Use to choose focus-driven, custom, or hidden prompt behavior. |
WidgetClass | Widget class used for the main prompt when the target owns its own widget. | Set this when the interactable should provide a custom prompt presentation. |
FocusWidgetPlacementMode | Chooses between projected target placement and fixed screen placement for focus prompts. | Use projected placement for world-attached prompts; use fixed screen placement for HUD-style prompts. |
WidgetDrawSize | Explicit widget draw size in pixels. (0, 0) uses the widget's desired size. | Set when you need a stable fixed prompt size. |
WidgetRelativeOffset | World-space offset applied from the actor or widget anchor in projected mode. | Use to position the prompt above, beside, or near the object. |
FixedScreenPosition | Normalized viewport anchor for fixed screen placement. | Use values from 0 to 1, such as (0.5, 0.5) for screen center. |
FixedScreenWidgetOffset | Pixel offset applied after resolving the fixed screen anchor. | Use for final HUD layout adjustment. |
WidgetVisibilityDistance | Maximum distance where the main widget may be visible. | Use when prompt visibility should differ from interaction reach. |
WidgetInteractionAnchorComponent | Legacy component reference fallback kept for compatibility. | Prefer adding an InteractionWidgetAnchorComponent to the actor instead. |
Notification field
| Variable | What it does | When to change it |
NotificationWidgetClass | Viewport widget class used when this interactable sends a notification payload to an interactor. | Set when this target should show custom messages such as locked, missing key, blocked, or requirement feedback. |
Notification widgets: notification widgets should inherit from
InteractionNotificationWidgetBase so the plugin can apply FInteractionNotificationData consistently.
Custom Data
CustomData is a replicated array of named float entries. It lets you attach lightweight gameplay state to an interactable
without subclassing it: fuel, charge, temperature, lock attempts, puzzle progress, durability, or any float value your game needs.
It is server-authoritative, replicated to clients, and included in component state snapshots.
| Node | What it does | Notes |
SetCustomData(Key, Value) | Adds or updates a named float value. | Authority only. Broadcasts custom data change events. |
SetCustomDataSilent(Key, Value) | Adds or updates a value without immediately firing the change event. | Authority only. Useful for batch writes. |
NotifyCustomDataChanged() | Fires change events for the current entries. | Call after a group of silent writes when listeners should react once to the batch. |
GetCustomData(Key, DefaultValue) | Reads a value by key. | Safe to call on any machine. Returns the default when the key is missing. |
HasCustomData(Key) | Checks whether a key exists. | Safe to call on any machine. |
RemoveCustomData(Key) | Removes a key and broadcasts the change. | Authority only. Removed keys report NewValue = 0. |
Slot API
| Node | What it does | Notes |
GetSlot | Finds a slot definition by SlotID. | Pure read. Use for inspecting setup data. |
GetSlots | Returns the current slot definition array. | Pure read. |
SetSlots | Replaces the initial slot definition list. | Valid before BeginPlay. Refused after BeginPlay by design. |
GetEnabledSlots | Returns slots currently available according to runtime state. | Useful for UI and target inspection. |
GetOrderedSlots | Returns slots sorted by their configured priority/order rules. | Can optionally return enabled slots only. |
AddSlot | Adds a slot definition. | Authority only. Intended for setup-time or controlled runtime initialization paths. |
RemoveSlot | Removes a slot by SlotID. | Authority only. |
SetSlotPrompt | Updates a slot prompt and optional hint. | Authority only. Useful for dynamic labels. |
SetSlotEnabled | Enables or disables a slot at runtime. | Authority only. Use instead of editing Slots directly. |
SetSlotBlocked | Blocks or unblocks a slot and can provide a failure reason. | Authority only. Use for locked, missing requirement, or temporarily invalid states. |
ResetSlot | Restores one slot runtime state. | Authority only. |
ResetAllSlots | Restores all slot runtime states. | Authority only. |
StartSlotCooldown | Starts the configured cooldown for a slot. | Authority only. |
Interaction and validation API
| Node | What it does | Notes |
CanInteract | Checks whether an interactor can use this target. | Pure validation helper. |
CanInteractSlot | Checks whether an interactor can use a specific slot. | Pure validation helper. |
CanInteractSlotWithReason | Checks a slot and returns an EInteractionResult plus failure text. | Use when UI or notifications should explain why an action failed. |
GetEffectiveInteractionDistance | Returns the effective range after applying the target override. | Pure helper. |
IsWithinInteractionDistance | Checks interactor distance against the effective range. | Pure helper. |
SetInteractable | Changes the component-level enabled state. | Authority only. |
SetInteractionInfo | Updates object-level title and description. | Authority only. |
IsInteractionBlocked | Checks whether this target is blocked for a specific interactor. | Pure helper. |
IsBeingInteracted | Returns whether the target currently has an active interaction. | Pure helper. |
ForceCompleteSlot | Completes a slot from authoritative gameplay code. | Authority only. Useful for scripted outcomes. |
Health and damage API
| Node | What it does | Notes |
GetSlotHealth | Returns current and max health for a slot. | Use for damageable interactions and UI. |
GetSlotHealthNormalized | Returns health normalized to 0-1. | Use for progress bars or health indicators. |
SetSlotHealth | Sets runtime health for a slot. | Authority only. |
ApplyDamageToSlot | Applies damage to a slot with an optional damage type and instigator. | Authority only. Use for damage-based and multi-hit interactions. |
Snapshot and respawn API
| Node | What it does | Notes |
CaptureStateSnapshot | Captures the component's persistent runtime state. | Pure helper used by save systems. |
ApplyStateSnapshot | Restores a previously captured component state. | Authority only. Triggers the same relevant change events used by runtime changes. |
GetRespawnRemainingTime | Returns how much time remains before respawn. | Pure helper. |
CancelRespawn | Cancels a pending respawn. | Authority only. |
Widget, outline, and notification API
| Node | What it does | Notes |
ShowWidget | Shows this interactable's main widget. | Use for explicit widget control. |
HideWidget | Hides this interactable's main widget. | Use for explicit widget control. |
GetWidgetComponent | Returns the spawned widget component, if any. | Pure helper. |
GetWidgetInteractionAnchorComponent | Returns the scene component used as the widget anchor. | Pure helper. Prefer InteractionWidgetAnchorComponent on the actor. |
GetWidgetAnchorTransform | Returns the resolved widget anchor transform. | Use for custom projected UI. |
GetWidgetAnchorWorldLocation | Returns the resolved widget anchor location. | Use for indicators, debug, or custom UI placement. |
GetUserWidget | Returns the user widget instance inside the widget component. | Useful when you need to call functions on a custom prompt widget. |
GetOutlineSettings | Returns this target's outline settings. | Pure helper. |
NotifyInteractor | Sends a structured local notification to a specific interactor. | Use for missing item, blocked, failed, or contextual feedback. |
NotifyInteractorMessage | Blueprint-friendly helper for sending text notifications. | Use when you do not need to build a full notification struct. |
Distant indicator API
| Node | What it does | Notes |
InitializeDistantIndicator | Creates or initializes the distant indicator widget component. | Usually handled by the plugin. |
ShowDistantIndicatorLocal | Shows the distant indicator on the local client. | Client-side only. Not replicated. |
HideDistantIndicatorLocal | Hides the distant indicator on the local client. | Client-side only. Not replicated. |
Target-side events
| Event | When it fires | Common use |
OnInteractionStarted | When a validated interaction starts on this target. | Start animations, sounds, highlight changes, or target-side state. |
OnInteractionCompleted | When an interaction completes. | Open, collect, consume, unlock, destroy, or transition the target. |
OnInteractionCancelled | When an active interaction is cancelled. | Stop animations, reset progress, or revert temporary visuals. |
OnHoldProgressTick | When hold progress updates. | Update target-side progress effects. |
OnHitReceived | When a hit/damage interaction reaches this target. | Play impact feedback or update damage visuals. |
OnAllHitsReceived | When a multi-hit or damage requirement is fully satisfied. | Trigger break, harvest, destroy, or completion effects. |
OnToggled | When a toggle interaction changes state. | Switch lights, machines, doors, or modes. |
OnInteractorFocused | When an interactor focuses this target. | Target-side visual response. |
OnInteractorUnfocused | When an interactor stops focusing this target. | Remove target-side visual response. |
OnCooldownFinished | When the interactable cooldown completes. | Re-enable broad target feedback. |
OnSlotCooldownFinished | When a specific slot cooldown completes. | Re-enable slot-specific UI or logic. |
OnInteractableStateChanged | When bIsInteractable changes. | React to global availability changes. |
OnBlockedStateChanged | When blocked state changes. | Update locked/blocked visuals. |
OnSlotsStateChanged | When slot runtime state changes. | Refresh custom UI or gameplay logic that depends on slot availability. |
OnRespawned | When the interactable finishes respawning. | Restore visuals, collision, or gameplay state. |
OnInteractionDenied | When an interactor attempts to use this target but fails validation. | Send feedback, play denied sounds, or show requirement messages. |
OnCustomDataChanged | When a custom data key is added, changed, removed, replicated, or restored. | React to lightweight gameplay state changes. |
OnCustomDataChangedWithSource | Same custom data change, with an EInteractionStateChangeSource. | Differentiate runtime changes, replication, and snapshot restore paths. |
Authority and multiplayer notes
- Target-side state changes are authority-driven. Most mutation nodes are marked Authority Only.
- Use interactor-side predicted events for instant local player feedback, and target-side events for validated world results.
SlotRuntimeStates replicates mutable slot state; static slot definitions should be treated as setup data.
- Custom data is replicated, but writes should happen on the server.
- Distant indicator show/hide functions are local presentation helpers and are not replicated.
Blueprint checklist
- Add
InteractableComponent to the target actor.
- Configure one or more
Slots before BeginPlay.
- Keep
bRegisterForSave enabled for persistent placed interactables.
- Use runtime nodes, not direct
Slots writes, after BeginPlay.
- Bind target behavior to
OnInteractionCompleted, OnHitReceived, OnAllHitsReceived, or the event that matches the slot type.
- Use
CanInteractSlotWithReason and OnInteractionDenied when you need clear failure feedback.
- Use
GetSlotHealthNormalized for health/progress UI driven by damageable slots.
Related chapters
Slot-specific fields
Use Slot and Settings Reference for the nested data inside Slots.
Prompt and notification presentation
Use UI and Feedback for widget placement, rows, indicators, notifications, and outline behavior.
Saving target state
Use Save and Persistence for snapshot nodes and world-level save/load flow.
Player-side acquisition
Use Interactor Reference for tracing, focus selection, prediction, and interaction entry points.