Troubleshooting

Solutions to common problems and issues.


Widget Issues

Widget doesn’t appear

Symptoms: Looking at object, but no widget visible

Solutions:

  1. Check Widget Component:

    Widget Class: assigned (not empty)
    Visible: False (plugin auto-shows it on focus)
    
  2. Check Widget Blueprint:

    Parent Class = InteractionWidget
    Has valid design (not empty)
    Text elements marked "Is Variable"
    
  3. Check InteractionData:

    InteractionName is set (not empty)
    bIsEnabled = True
    
  4. Force Test:

    Event BeginPlay
    └─ Widget Component → Set Visibility (True)
    

    If widget shows now → System works, check focus logic.

  5. Check CanInteract + bHideWidgetWhenUnavailable: If CanInteract() returns false and bHideWidgetWhenUnavailable = true (default), the widget will be hidden even when focused. Override CanInteract or set bHideWidgetWhenUnavailable = false to debug.


Widget shows but doesn’t update

Symptoms: Widget visible but shows default text

Cause: Events not implemented or not firing

Solutions:

  1. Check Event Implementation:

    Event OnInteractionAvailable (InteractionData)  ← Must exist!
    └─ Break FInteractionData
       └─ Set Text (Text_ActionName)
    
  2. Verify Widget receives data:

    Event OnInteractionAvailable
    └─ Print String (InteractionData.InteractionName)
    

    If it prints → Events work, check text binding.

  3. Check Variable Names:

    • Ensure Text_ActionName (or your name) is marked “Is Variable”
    • Variable name in Graph must match name in Designer

Widget appears at wrong location

Solution: Position Widget Component on the object.

1. Select Widget Component in Components panel
2. Transform → Location: Adjust X/Y/Z
   Example: Z = 100 (100cm above object pivot)

Widget too big / small

Solution: Adjust Draw Size

Widget Component:
└─ Draw Size: 400 x 150 (default)

Smaller: 200 x 75
Larger: 600 x 200

Interaction Issues

OnInteract doesn’t fire

Symptoms: Looking at object, pressing key, nothing happens

Solutions:

  1. Check Collision:

    Object's Mesh:
    ├─ Collision Enabled: Query Only or Collision Enabled
    └─ Object Type: WorldStatic or WorldDynamic
    
    Good presets: BlockAll, BlockAllDynamic
    
  2. Check Component State:

    InteractableComponent:
    ├─ bIsEnabled = True
    ├─ bIsOnCooldown = False
    └─ InteractionData is filled
    
  3. Check Detection:

    InteractionComponent (Player):
    ├─ Show Debug = True
    └─ Look at object → See green line?
       ├─ Yes → Detection works, check interaction
       └─ No  → Detection issue (see below)
    
  4. Test with Print:

    Event OnInteract (Server)
    └─ Print String ("INTERACTION TRIGGERED!")
    
  5. Check Interaction Type:

    • For HoldOnInteract does not fire! Use OnHoldCompleted instead.
    • For InstantAndHold — Only OnInteract (tap) OR OnHoldCompleted (hold) fires per press.

Can detect object but can’t interact

Symptoms: Debug line green, widget shows, but pressing key does nothing

Causes:

  • Input not bound correctly
  • Missing Stop Interaction binding (needed for Hold)
  • Cooldown active

Solutions:

  1. Verify Input Binding:

    Input Action (Pressed)
    └─ InteractionComponent → Start Interaction
    
    Input Action (Released)   ← Required for Hold!
    └─ InteractionComponent → Stop Interaction
    
  2. Check in Player Character:

    • Input binding is in Player/Character Blueprint
    • InteractionComponent is on Player/Character, not on the Interactable Object
  3. Reset Cooldown:

    InteractableComponent → Reset Cooldown
    

Object detected from too far away

Solution: Reduce Interaction Distance

InteractionComponent:
└─ Interaction Distance: 500 → 300

Can’t interact when very close

Cause: Minimum distance filtering

Solution:

InteractionComponent:
├─ bUseDistanceFiltering = False
or
└─ MinInteractionDistance = 0

Detection Issues

Nothing gets detected

Symptoms: Debug line always red, never green

Solutions:

  1. Check InteractionComponent placement:

    On Player/Character (not on objects!)
    Detection Distance > 0 (e.g., 500)
    Show Debug = True (for testing)
    
  2. Check Object:

    Has InteractableComponent
    Has Collision enabled
    Not too far away
    
  3. Try Different Method:

    Change Detection Method to Overlap
    Increase Interaction Distance to 1000
    Disable all filtering temporarily
    
  4. Verify Trace Channel:

    • Default uses ECC_Visibility
    • Ensure objects block this channel (most static mesh presets do)
    • Tip: For production projects consider creating a dedicated collision channel (e.g. ECC_Interaction) in your Project Settings → Collision. This avoids conflicts with other systems that also use ECC_Visibility (cameras, AI sight, etc.) and gives you full control over which meshes are detectable. See Advanced Setup for details.

Wrong object selected

Symptoms: Multiple objects nearby, but wrong one is focused

Solution: Use Priority System

Important Object:
└─ InteractionData → Priority = 10

Less Important:
└─ InteractionData → Priority = 0

System auto-selects highest priority.

Objects behind walls detected

Cause: Trace goes through walls (mainly Overlap/Cone methods)

Solutions:

  1. Ensure walls have collision:

    Wall:
    └─ Collision: BlockAll
    
  2. Use Line Trace method:

    • Most accurate — naturally blocked by geometry
    • Best for FPS / precision detection

Multiplayer Issues

Interaction works in singleplayer but not multiplayer

Solutions:

  1. Verify Replication is enabled:

    InteractionComponent → Replicates = True (default)
    InteractableComponent → Replicates = True (default)
    
  2. Check Authority on your logic:

    Event OnInteract
    ├─ Branch: Has Authority?
    │  ├─ True → "Running on SERVER"
    │  └─ False → "Running on CLIENT"
    

    OnInteract should only print “SERVER”. If it prints “CLIENT”, you may be calling it outside of the system.

  3. Test Distance on Server:

    • Server validates distance separately from client detection
    • If client moves away after starting interaction, server may reject it

Client sees other client’s interactions wrong

Cause: State not replicated or visual feedback missing

Solution:

  • Use OnInteract_Multicast for sounds and visual effects — this fires on all clients
  • Use Replicated variables for persistent state changes:
    UPROPERTY(Replicated)
    bool bIsActivated;
    
  • Implement OnHoldCompleted_Multicast for hold completion effects

Lag causes missed interactions

This is expected — server authority introduces a small validation delay.

Mitigation:

  • Provide immediate visual feedback on client via OnInteract_Multicast
  • Show “processing” state during server round-trip if needed
  • Consider bRequiresServerAuthority = false for purely cosmetic interactions

Performance Issues

Low FPS when many interactables

Solutions:

  1. Increase Detection Interval:

    InteractionComponent:
    └─ Detection Interval: 0.1 → 0.2 or 0.3
    
  2. Use Distance Culling:

    Event Tick (throttled every 2 seconds)
    ├─ Distance to Player > 2000?
    │  ├─ True  → SetEnabled (False)
    │  └─ False → SetEnabled (True)
    
  3. Disable Debug:

    Show Debug = False
    
  4. Optimize Detection Method:

    • Line Trace: Best performance
    • Sphere Trace: Good
    • Cone: Good
    • Overlap: Fair (gets expensive with many objects in range)

Widget Visualization Issues

Widget appears behind objects

Solution: Adjust render order

Widget Component:
└─ Translucency Sort Priority = 100

Higher values render later (on top of other translucent objects).


Widget pixelated / blurry

Solution: Increase Draw Size

Widget Component:
└─ Draw Size = 800 x 300 (double the default)

Or increase widget texture quality in widget designer settings.


Widget doesn’t face camera

A: The plugin automatically sets the Widget Component to Screen Space, which always faces the camera. If you are overriding this somewhere and the widget is not facing the camera, check if any code is manually setting the Widget Component space to World.

If you need to control this manually:

Event Tick
├─ Get Player Camera Location
├─ Find Look at Rotation
└─ Set World Rotation (Widget Component)

Build / Compilation Issues

“Plugin requires rebuild”

Solution:

  1. Close Unreal Editor
  2. Delete these folders:
    • ProjectRoot/Binaries/
    • ProjectRoot/Intermediate/
    • ProjectRoot/Plugins/OwnInteract/Binaries/
    • ProjectRoot/Plugins/OwnInteract/Intermediate/
  3. Right-click .uproject → Generate VS project files
  4. Reopen project (will rebuild)

Build errors with InteractionWidget

Cause: Widget does not inherit from correct class

Solution:

  1. Open Widget Blueprint
  2. File → Class Settings
  3. Parent Class → InteractionWidget
  4. If not in list → Plugin not loaded correctly (check Plugins menu)

Debug Checklist

Run through this checklist systematically before asking for help:

Player Setup:

  • [ ] InteractionComponent is on Character (not on interactable object)
  • [ ] Input bound to Start Interaction (press) and Stop Interaction (release)
  • [ ] Detection Distance > 100
  • [ ] Show Debug enabled

Object Setup:

  • [ ] InteractableComponent present
  • [ ] WidgetComponent present (Widget Class assigned)
  • [ ] Collision enabled (BlockAll or similar)
  • [ ] InteractionData filled (InteractionName is not empty)
  • [ ] bIsEnabled = True

Widget Setup:

  • [ ] Widget Blueprint inherits from InteractionWidget
  • [ ] Has UI elements (Text, etc.)
  • [ ] Text elements marked “Is Variable”
  • [ ] OnInteractionAvailable event implemented

Test:

  • [ ] Green debug line when looking at object?
  • [ ] Widget appears when looking?
  • [ ] Print String in OnInteract fires?

If all checked and still not working:

  • Try with a completely fresh test Actor
  • Ensure no other systems are interfering
  • Check Output Log for errors in red

Get Help

If you have tried everything:

  1. Check FAQ for common questions
  2. Verify against Getting Started guide
  3. Check the API Reference for correct property names
  4. Join the Discord community
  5. Contact support via Marketplace

← Back to Index | FAQ →