We are in process of upgrading our game from UE 5.2.1 to UE 5.6.
The problem we saw is that our AI stopped moving.
We have a custom C++ class that inherits UBTTask_MoveTo and is blueprintable. We have a custom blueprint task that inherits it.
We saw that when we resave the Behavior Tree, the Task’s Blackboard Key is invalidated.
Further investigation shows that if that BP Task has no functions it works correctly when BT is saved, but once a function is added to the BP Task it stops working correctly.
I was able to reproduce the issue with stock UE 5.6.
The project consists of:
Blackboard BB_CommonEx that has 4 keys - Vector, Actor, Int, Float
Behavior Tree BT_Base
Two custom C++ classes that inherit UBTTask_MoveTo. One empty and one with only constructor
Four blueprint BT task 2 for each of the classes from 3. The ones ending with _1 have 1 empty function and the other two are empty
To see the issue:
Open BT_Base change all 4 Tasks Blackboard Key to some value( Observe that the ones with _1 have all the keys from the Blackboard, but it should show only Vector and Actor keys)
Save BT_Base
Observe that the ones with _1 are invalid. The other two are ok.
Thank you for the report. I was able to reproduce this issue in UE 5.6 and also in a recent build from Main (CL 43981109). Based on my tesitng, this appears to be a regression introduced in UE 5.6, as the issue does not occur in 5.5 or earlier versions.
The root of the problem appears to be a change in UBTNode that added save-time validation for Blackboard key references. The PreSave override now scans for properties and attempts to validate them against the assigned Blackboard asset at save time.
Unfortunately, this logic is not handling BP based task nodes correctly and saving the BT causes the blackboard key selectors to become invalid. Removing the functions from the BP doesn’t restore the behavior once the asset has been affected.
I’ll be submitting a JIRA report to the engine team with all the relevant details so the issue can be properly addressed. I’ll follow up once the report is ready.
As a workaround, if you’re building from source, you can disable the validation logic inside UBTNode::PreSave retaining only the call to the superclass.
Please note that Epic ultimately determines whether the issue will be made publicly accessible, and the process may take a few days. The tracking link might not work immediately.
I’ll close the case, but feel free to reply if you have anything else to add.