Hello everyone,
I’m currently running into a persistent issue with the Smart Object system in Unreal Engine 5.6 while using the Gameplay Interaction / StateTree workflow. My NPC successfully finds and claims a Smart Object slot (a chair), but the navigation phase fails.
The native StateTree task Find Entry Location always returns Failed. Even when disabling all validation constraints, the subsystem refuses to provide the Entrance transform.
I’ve performed deep debugging in C++ to isolate the cause:
Handle Validity: I verified the FSmartObjectSlotHandle via logs. It is perfectly valid and remains active throughout the process.
- Validation Bypass: In the Smart Object Definition, I disabled:
- Check Transition Trajectory
- Trace Ground Location
- Project Navigation Location
- Result: Still fails.
C++ API Tests:
- Calling Subsystem->FindEntranceLocationForSlot with a minimal request (all flags false) returns false.
- Setting bUseSlotLocationAsFallback = true in the request still returns false.
- Removing the UserActor from the request (Dry Run) still returns false.
The Working Workaround: If I call Subsystem->GetSlotTransform(SlotHandle) manually, I get the correct world transform and the NPC can move to the chair.
Logs & Clues
I noticed this recurring warning in the logs: LogSmartObject (Warning) FSmartObjectValidationContext::Init: Invalid validation filter for user actor BP_MyNPC_C_1.
It seems that the FSmartObjectValidationContext fails to initialize or rejects the query before it even looks for the Entrance data, even when “None” is selected as the validation filter.
Steps to Reproduce
- Create a Smart Object Definition with a Slot and an Entrance definition data.
- Disable all collision on the Static mesh and on the SmartObjectActor
- Remove collision box on the static mesh
- Uncheck “Check Transition Trajectory”
- Set up an NPC with SmartObjectUser and GameplayInteractionUser components.
- On the NPC StateTree use a task to query smartobjects, claim one and use the node “Use Smart Object With Gameplay Interaction” (pass it the actor’s AIController and de Claim handle) => This will lauch the State tree of the smart Object.
- Create a StateTree with the Gameplay Interaction Schema. Name it ST_Chair for the test
- Assign ST_Chair on the slot’s behavior Definitions (use type : Gameplay Interaction Smart Object Behavior Definition)
- Try to use the native Find Entry Location task on a claimed slot.
- On the task Bind to the actor and
- Bind to the SmarObjectClaimedHandle → Slot Handle
- Uncheck “Check Transition Trajectory”
- Uncheck “Check Entrance Location Overlap”
- Uncheck “Check Slot Location Overlap”
- Check “Use Slot Location as FallBack Candidate”
- Location Type = Entry
- Validation filter = None (i’ve tried to unbind the actor as this one is on none and it didn’t worked)
Observe that it fails even if the entrance is clearly visible in the viewport and validation checks are disabled.
Has anyone else noticed a change in how UE 5.6 handles Slot Entrance validation? Why would FindEntranceLocation fail to even fallback to the slot transform while GetSlotTransform works fine with the same handle?
Any help or insight would be greatly appreciated!