Troubleshooting
Solutions to common problems and issues.
Widget Issues
Widget doesn’t appear
Symptoms: Looking at object, but no widget visible
Solutions:
-
Check Widget Component:
Widget Class: assigned (not empty) Visible: False (plugin auto-shows it on focus) -
Check Widget Blueprint:
Parent Class = InteractionWidget Has valid design (not empty) Text elements marked "Is Variable" -
Check InteractionData:
InteractionName is set (not empty) bIsEnabled = True -
Force Test:
Event BeginPlay └─ Widget Component → Set Visibility (True)If widget shows now → System works, check focus logic.
-
Check CanInteract + bHideWidgetWhenUnavailable: If
CanInteract()returnsfalseandbHideWidgetWhenUnavailable = true(default), the widget will be hidden even when focused. OverrideCanInteractor setbHideWidgetWhenUnavailable = falseto debug.
Widget shows but doesn’t update
Symptoms: Widget visible but shows default text
Cause: Events not implemented or not firing
Solutions:
-
Check Event Implementation:
Event OnInteractionAvailable (InteractionData) ← Must exist! └─ Break FInteractionData └─ Set Text (Text_ActionName) -
Verify Widget receives data:
Event OnInteractionAvailable └─ Print String (InteractionData.InteractionName)If it prints → Events work, check text binding.
-
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:
-
Check Collision:
Object's Mesh: ├─ Collision Enabled: Query Only or Collision Enabled └─ Object Type: WorldStatic or WorldDynamic Good presets: BlockAll, BlockAllDynamic -
Check Component State:
InteractableComponent: ├─ bIsEnabled = True ├─ bIsOnCooldown = False └─ InteractionData is filled -
Check Detection:
InteractionComponent (Player): ├─ Show Debug = True └─ Look at object → See green line? ├─ Yes → Detection works, check interaction └─ No → Detection issue (see below) -
Test with Print:
Event OnInteract (Server) └─ Print String ("INTERACTION TRIGGERED!") -
Check Interaction Type:
- For Hold —
OnInteractdoes not fire! UseOnHoldCompletedinstead. - For InstantAndHold — Only
OnInteract(tap) OROnHoldCompleted(hold) fires per press.
- For Hold —
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:
-
Verify Input Binding:
Input Action (Pressed) └─ InteractionComponent → Start Interaction Input Action (Released) ← Required for Hold! └─ InteractionComponent → Stop Interaction -
Check in Player Character:
- Input binding is in Player/Character Blueprint
- InteractionComponent is on Player/Character, not on the Interactable Object
-
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:
-
Check InteractionComponent placement:
On Player/Character (not on objects!) Detection Distance > 0 (e.g., 500) Show Debug = True (for testing) -
Check Object:
Has InteractableComponent Has Collision enabled Not too far away -
Try Different Method:
Change Detection Method to Overlap Increase Interaction Distance to 1000 Disable all filtering temporarily -
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 useECC_Visibility(cameras, AI sight, etc.) and gives you full control over which meshes are detectable. See Advanced Setup for details.
- Default uses
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:
-
Ensure walls have collision:
Wall: └─ Collision: BlockAll -
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:
-
Verify Replication is enabled:
InteractionComponent → Replicates = True (default) InteractableComponent → Replicates = True (default) -
Check Authority on your logic:
Event OnInteract ├─ Branch: Has Authority? │ ├─ True → "Running on SERVER" │ └─ False → "Running on CLIENT"OnInteractshould only print “SERVER”. If it prints “CLIENT”, you may be calling it outside of the system. -
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_Multicastfor sounds and visual effects — this fires on all clients - Use Replicated variables for persistent state changes:
UPROPERTY(Replicated) bool bIsActivated; - Implement
OnHoldCompleted_Multicastfor 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 = falsefor purely cosmetic interactions
Performance Issues
Low FPS when many interactables
Solutions:
-
Increase Detection Interval:
InteractionComponent: └─ Detection Interval: 0.1 → 0.2 or 0.3 -
Use Distance Culling:
Event Tick (throttled every 2 seconds) ├─ Distance to Player > 2000? │ ├─ True → SetEnabled (False) │ └─ False → SetEnabled (True) -
Disable Debug:
Show Debug = False -
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:
- Close Unreal Editor
- Delete these folders:
ProjectRoot/Binaries/ProjectRoot/Intermediate/ProjectRoot/Plugins/OwnInteract/Binaries/ProjectRoot/Plugins/OwnInteract/Intermediate/
- Right-click
.uproject→ Generate VS project files - Reopen project (will rebuild)
Build errors with InteractionWidget
Cause: Widget does not inherit from correct class
Solution:
- Open Widget Blueprint
- File → Class Settings
- Parent Class →
InteractionWidget - 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”
- [ ]
OnInteractionAvailableevent implemented
Test:
- [ ] Green debug line when looking at object?
- [ ] Widget appears when looking?
- [ ] Print String in
OnInteractfires?
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:
- Check FAQ for common questions
- Verify against Getting Started guide
- Check the API Reference for correct property names
- Join the Discord community
- Contact support via Marketplace