This issue seems to stem from the incorrect constructor being called for TScriptInterface, so the correct Interface pointer does not get called.


If you explicitly connect a reference to "Self" to the Task Owner input pin, than the code behaves as expected. 

Steps to Reproduce
  1. Create a blueprint with AIController as the native base class.
  2. Open the event graph for that new BP.
  3. Add a "Task Wait Delay" node (the Gameplay Task wait-delay, not the AbilityTask wait-delay) and connect its exec input to the BeginPlay event.
  4. Set the Time on the delay node to 1.0 (important because the delay node doesn't work with 0 delay).
  5. Leave the TaskOwner field disconnected; it's set to DefaultToSelf so that should be fine.
  6. Add a "Print String" node and connect it to the "OnFinish" pin on the delay node.
  7. Set the message and duration on the Print String node to something you'll see.
  8. Next create a new Character BP.
  9. Set the "AI Controller Class" to the class you created above.
  10. Add a mesh to the mesh component.
  11. Drop an instance of this character in a level and run the level.

Result: Notice that you do not see printed string. You can set breakpoints in the AI Controller BP to see that the delay does indeed execute but never finishes.

Expected: The breakpoints in the AI controller BP are hit and the string is printed from the "On Finish" exec pin.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-97884 in the post.

Login to Vote

ComponentUE - Gameplay - Blueprint
Affects Versions4.
Target Fix5.0-early access
Fix Commit15853352
Main Commit15854575
Release Commit15853352
CreatedAug 31, 2020
ResolvedMar 29, 2021
UpdatedApr 28, 2021