API Reference
Complete reference for all OwnInteract components, types, properties, events, and functions.
Data Types
EInteractionType
| Value |
Description |
Instant |
Triggers immediately on input press |
Hold |
Player must hold for HoldDuration seconds |
InstantAndHold |
Tap (under TapThreshold) = Instant; Hold = Hold |
EInteractionDetectionMethod
| Value |
Description |
Best For |
LineTrace |
Single ray from camera center |
FPS, precision |
SphereTrace |
Swept sphere along ray |
Third-person |
Overlap |
Radius sphere around player |
Proximity-based |
Cone |
Distance + angle combination |
VR, wide scanning |
FInteractionData
Configuration struct for a single interaction. Used in InteractableComponent.InteractionData, InteractionPoints[], and InteractionOptions[].
| Property |
Type |
Default |
Description |
InteractionName |
FText |
— |
Display name shown in widget (“Open Door”) |
InteractionDescription |
FText |
— |
Optional additional description |
InteractionType |
EInteractionType |
Instant |
How the interaction triggers |
HoldDuration |
float |
1.0 |
Seconds to hold (Hold / InstantAndHold), clamped 0.1–10.0 |
TapThreshold |
float |
0.2 |
Tap detection window (InstantAndHold), clamped 0.05–1.0 |
Priority |
int32 |
0 |
Higher wins when multiple objects overlap |
Cooldown |
float |
0.0 |
Seconds before reuse, clamped 0.0–60.0 |
bRequiresServerAuthority |
bool |
true |
If false, executes locally (no server RPC) |
bReplicateHoldProgress |
bool |
false |
Multicast hold progress to all clients (~10/sec) |
FInteractionPoint
Defines a single interaction zone on an object. Used in InteractableComponent.InteractionPoints[].
| Property |
Type |
Default |
Description |
RelativeLocation |
FVector |
(0,0,0) |
Position of this zone relative to the actor’s root |
DetectionRadius |
float |
30 |
Radius in cm for point-to-ray detection, clamped 5–500 |
InteractionData |
FInteractionData |
— |
The interaction configuration for this specific zone |
bIsEnabled |
bool |
true |
Enable or disable this point at runtime |
InteractionComponent
Type: UInteractionComponent (ActorComponent)
Attach to: Player Character or AI Character
Handles object detection, multi-point/option tracking, input management, hold timing, input device detection, and all RPCs.
Detection Properties
| Property |
Type |
Default |
Description |
DetectionMethod |
EInteractionDetectionMethod |
LineTrace |
Detection method to use |
InteractionDistance |
float |
500 |
Maximum detection range in cm |
MinInteractionDistance |
float |
0 |
Minimum detection range in cm |
SphereTraceRadius |
float |
30 |
Sphere radius for Sphere Trace method |
MaxDetectionAngle |
float |
45 |
Max angle from camera forward (Cone / Angle filter) |
DetectionInterval |
float |
0.1 |
How often detection runs in seconds (0.01–1.0) |
bShowDebug |
bool |
false |
Draw debug visualization in editor |
Filtering Properties
| Property |
Type |
Default |
Description |
bUseAngleFiltering |
bool |
false |
Only detect within camera angle |
bUseTagFiltering |
bool |
false |
Only detect tagged objects |
bUseDistanceFiltering |
bool |
false |
Filter by min/max distance |
RequiredTags |
TArray<FName> |
— |
Actor must have ALL these tags |
IgnoredTags |
TArray<FName> |
— |
Actor with ANY of these tags is ignored |
InteractionComponent Functions
Interaction Control
| Function |
Returns |
Description |
StartInteraction() |
void |
Begin interaction with focused object |
StopInteraction() |
void |
Stop current hold interaction |
CycleInteractionOption(int32 Direction) |
void |
Scroll through options (+1 forward, -1 back) |
| Function |
Returns |
Description |
SetActiveInputType(bool bIsGamepad) |
void |
Notify component of input device change |
IsGamepadActive() |
bool |
Returns true if gamepad is the active device |
AI Support
| Function |
Returns |
Description |
SetInteractionTarget(AActor*) |
void |
Manually set interaction target (bypasses detection, for AI) |
Query
| Function |
Returns |
Description |
GetCurrentInteractable() |
AActor* |
Currently focused actor (or null) |
IsInteracting() |
bool |
True if a hold is in progress |
GetHoldProgress() |
float |
Current hold progress 0.0–1.0 |
Blueprint Events (on InteractionComponent)
| Event |
Parameters |
Description |
OnInteractableFocused |
Actor, InteractionData |
New object focused |
OnInteractableUnfocused |
Actor, InteractionData |
Focus lost |
OnInteractionTriggered |
Actor, InteractionData |
Instant interaction triggered |
OnHoldInteractionStarted |
Actor, InteractionData |
Hold began |
OnHoldInteractionProgress |
Actor, InteractionData, Progress |
Hold progress (0.0–1.0) |
OnHoldInteractionCompleted |
Actor, InteractionData |
Hold succeeded |
OnHoldInteractionCancelled |
Actor, InteractionData |
Hold cancelled |
Server RPCs (internal)
Called automatically — do not call directly.
| RPC |
Direction |
Parameters |
Description |
ServerStartInteraction |
Client → Server |
Actor, PointIndex, OptionIndex |
Request start |
ServerStopInteraction |
Client → Server |
— |
Request stop hold |
ServerTapInteraction |
Client → Server |
Actor, PointIndex, OptionIndex |
Confirm tap (InstantAndHold) |
ServerCompleteHoldInteraction |
Client → Server |
Actor, PointIndex, OptionIndex |
Confirm hold complete |
ClientConfirmInstantInteraction |
Server → Client |
Actor |
Confirm instant to owner |
MulticastOnInteract |
Server → All |
Actor |
Trigger multicast events |
MulticastOnHoldStarted |
Server → All |
Actor |
Trigger hold started |
MulticastOnHoldCancelled |
Server → All |
Actor |
Trigger hold cancelled |
MulticastOnHoldCompleted |
Server → All |
Actor |
Trigger hold completed |
MulticastOnHoldProgress |
Server → All |
Actor, Progress |
Unreliable, throttled |
Replicated State
| Property |
Condition |
Description |
CurrentInteractableActor |
Always |
Currently focused interactable |
bIsInteracting |
COND_SkipOwner |
True during hold (owner manages locally) |
InteractableComponent
Type: UInteractableComponent (ActorComponent)
Attach to: Interactable Objects
Interaction Data Properties
| Property |
Type |
Description |
InteractionData |
FInteractionData |
Single interaction (used when Points and Options are empty) |
InteractionPoints |
TArray<FInteractionPoint> |
Multi-zone mode — each point has its own data and position |
InteractionOptions |
TArray<FInteractionData> |
Multi-option mode — player scrolls to choose |
Priority: If InteractionPoints has entries → multi-point mode. Else if InteractionOptions has entries → multi-option mode. Else → single interaction mode.
State & Control Properties
| Property |
Type |
Default |
Replicated |
Description |
bIsEnabled |
bool |
true |
Yes |
Can be interacted with |
bIsReusable |
bool |
true |
No |
If false, auto-disables after first use |
bIsOnCooldown |
bool |
false |
Yes |
Cooldown timer active |
bHideWidgetWhenUnavailable |
bool |
true |
No |
Hide vs show-disabled when unavailable |
Highlight Properties
| Property |
Type |
Default |
Description |
bEnableHighlight |
bool |
true |
Enable custom depth outline on focus |
HighlightStencilValue |
int32 |
1 |
Stencil value (0–255), match your Post Process material |
InteractableComponent Functions
| Function |
Parameters |
Description |
SetEnabled(bool) |
bEnabled |
Enable or disable at runtime |
ResetCooldown() |
— |
Immediately end cooldown |
SetPointEnabled(int32, bool) |
PointIndex, bEnabled |
Enable/disable a specific interaction point |
SetHighlightEnabled(bool) |
bEnabled |
Manually toggle the highlight outline |
IsFocused() |
— |
Returns true if a player is looking at this |
GetFocusingActor() |
— |
Returns the Actor currently focusing this |
HasInteractionPoints() |
— |
Returns true if multi-point mode is active |
HasInteractionOptions() |
— |
Returns true if multi-option mode is active |
GetActivePointIndex() |
— |
Returns currently active point index (-1 = single) |
GetActiveOptionIndex() |
— |
Returns currently selected option index |
SetWorldWidgetComponent(UWidgetComponent*) |
Component |
Assign widget component at runtime |
GetWorldWidgetComponent() |
— |
Returns the assigned widget component |
Blueprint Events (Delegates)
Focus Events
| Event |
Parameters |
When |
OnFocused |
Interacting Actor |
Player starts looking |
OnUnfocused |
Interacting Actor |
Player stops looking |
Instant Events
| Event |
Parameters |
Authority |
When |
OnInteract |
Interacting Actor |
Server |
Instant triggered — gameplay logic here |
OnInteract_Multicast |
Interacting Actor |
All Clients |
Sounds, VFX, visual feedback |
Hold Events
| Event |
Parameters |
Authority |
When |
OnHoldStarted |
Interacting Actor |
Server |
Hold began |
OnHoldStarted_Multicast |
Interacting Actor |
All Clients |
Hold began |
OnHoldProgress |
Actor, Progress (0–1) |
Local Client |
Every frame — widget updates |
OnHoldProgress_Multicast |
Actor, Progress |
All Clients |
If bReplicateHoldProgress = true |
OnHoldCompleted |
Interacting Actor |
Server |
Hold succeeded — gameplay logic here |
OnHoldCompleted_Multicast |
Interacting Actor |
All Clients |
Hold succeeded |
OnHoldCancelled |
Interacting Actor |
Server |
Hold released early |
OnHoldCancelled_Multicast |
Interacting Actor |
All Clients |
Hold cancelled |
IInteractableInterface — Blueprint Native Events
Override in Blueprint to customize behavior per object.
| Function |
Returns |
Description |
CanInteract(AActor*) |
bool |
Return false to block interaction |
GetInteractionData() |
FInteractionData |
Returns active data (handles point/option routing) |
OnInteractionFocused(AActor*) |
void |
Focus started (shows widget, enables highlight) |
OnInteractionUnfocused(AActor*) |
void |
Focus ended (hides widget, disables highlight) |
OnInteract(AActor*) |
void |
Server — instant gameplay logic |
OnInteract_Multicast(AActor*) |
void |
All clients — visual feedback |
OnInteractionHoldStarted(AActor*) |
void |
Server — hold begin |
OnInteractionHoldStarted_Multicast(AActor*) |
void |
All clients |
OnInteractionHoldProgress(AActor*, float) |
void |
Local client — 0.0–1.0 |
OnInteractionHoldProgress_Multicast(AActor*, float) |
void |
All clients (if enabled) |
OnInteractionHoldCompleted(AActor*) |
void |
Server — hold gameplay logic |
OnInteractionHoldCompleted_Multicast(AActor*) |
void |
All clients |
OnInteractionHoldCancelled(AActor*) |
void |
Server |
OnInteractionHoldCancelled_Multicast(AActor*) |
void |
All clients |
Type: UInteractionWidget (UserWidget)
Use as: Parent Class in your Widget Blueprint
Properties
| Property |
Type |
Default |
Description |
FadeOutDuration |
float |
0.2 |
Seconds to wait before hiding after unfocus (for animations) |
CurrentInteractionData |
FInteractionData |
— |
Currently active interaction data (read-only) |
bIsVisible |
bool |
false |
Whether widget is currently shown (read-only) |
Blueprint Implementable Events
Override these in your Widget Blueprint:
Core Events
| Event |
Parameters |
When |
OnInteractionAvailable(InteractionData) |
FInteractionData |
Object focused — update display |
OnInteractionUnavailable() |
— |
Focus lost — start fade-out |
OnInteractionTriggered() |
— |
Instant interaction triggered |
Hold Events
| Event |
Parameters |
When |
OnHoldStarted() |
— |
Hold began |
OnHoldProgressUpdated(Progress) |
float 0.0–1.0 |
Update progress bar |
OnHoldCompleted() |
— |
Hold succeeded |
OnHoldCancelled() |
— |
Hold cancelled |
Multi-Point Events
| Event |
Parameters |
When |
OnInteractionPointFocused(PointData, PointIndex) |
FInteractionData, int32 |
Player aims at different zone |
Multi-Option Events
| Event |
Parameters |
When |
OnInteractionOptionsAvailable(Options, ActiveIndex) |
TArray<FInteractionData>, int32 |
Object with options focused |
OnInteractionOptionChanged(ActiveOption, ActiveIndex) |
FInteractionData, int32 |
Player scrolled to different option |
| Event |
Parameters |
When |
OnInputDeviceChanged(bIsGamepad) |
bool |
Player switched between keyboard and gamepad |
| Function |
Description |
UpdateInteractionData(FInteractionData) |
Update data and trigger OnInteractionAvailable |
ShowWidget() |
Show immediately (cancels fade-out) |
RequestHide() |
Begin fade-out → hide after FadeOutDuration |
HideWidget() |
Hide immediately (bypasses fade) |
IsGamepadActive() |
Returns true if gamepad is active input |
Quick Reference
Interaction Mode Selection
| Condition |
Mode Used |
InteractionPoints has entries |
Multi-Point |
InteractionOptions has entries |
Multi-Option |
| Both empty |
Single interaction (InteractionData) |
Interaction Type → Events
| Type |
On Press |
On Release |
On Complete |
Instant |
OnInteract + _Multicast |
— |
— |
Hold |
OnHoldStarted + _Multicast |
OnHoldCancelled + _Multicast |
OnHoldCompleted + _Multicast |
InstantAndHold (tap) |
OnInteract + _Multicast |
— |
— |
InstantAndHold (hold) |
OnHoldStarted + _Multicast |
OnHoldCancelled + _Multicast |
OnHoldCompleted + _Multicast |
Event Authority Summary
| Event |
Use For |
OnInteract |
Server-side gameplay logic only |
OnInteract_Multicast |
Sounds, VFX, animations for all players |
OnHoldCompleted |
Server-side reward / state change |
OnHoldCompleted_Multicast |
Success effects for all players |
OnHoldProgress |
Widget progress bar (local only) |
| Widget Events |
UI only — always local, never use for gameplay |
Setup Checklist
| Item |
Required |
InteractionComponent on Character |
Yes |
StartInteraction() bound to press |
Yes |
StopInteraction() bound to release |
Yes (Hold / InstantAndHold) |
CycleInteractionOption() bound to scroll |
Yes (if using multi-option) |
InteractableComponent on object |
Yes |
InteractionName set |
Yes |
WidgetComponent on object |
Yes (for prompt) |
Widget Blueprint with InteractionWidget parent |
Yes (for prompt) |
OnInteractionAvailable implemented in widget |
Yes (for prompt) |
| Post Process Volume with outline material |
Yes (for highlight) |
← Core Concepts | Troubleshooting →