If the Wait Task is completed for the first frame, it may not return to the root node even after Finish. This can be avoided by increasing the wait time of the Wait Task (see CaseOK.mp4).
When this issue appears, UBehaviorTreeComponent::RequestExecution() is called before PendingUnregisterAuxNodesRequests.Ranges is reset.
LogBehaviorTree (Log) > skip: request by [0:10] that is in pending unregister aux nodes range [[0:9]...[0:11]]
Visual Debugger Log:
LogBehaviorTree (Verbose) Deactivate node: NewBehaviorTree::MyTask[4] LogBehaviorTree (Verbose) Search node update[Remove]: NewBehaviorTree::Blackboard Based Condition[2] LogBehaviorTree (Verbose) Deactivate node: NewBehaviorTree::Sequence[3] LogBehaviorTree (Verbose) Unregistering aux nodes up to [0:2] LogBehaviorTree (Verbose) Testing node: NewBehaviorTree::Selector[0] LogBehaviorTree (Verbose) Child[1] "NewBehaviorTree::Selector[6]" execution allowed by NewBehaviorTree::Blackboard Based Condition[5] LogBehaviorTree (Verbose) Search node update[Add]: NewBehaviorTree::Blackboard Based Condition[5] LogBehaviorTree (Verbose) Search node update[Add]: NewBehaviorTree::MyServise_2[7] LogBehaviorTree (Verbose) Testing node: NewBehaviorTree::Selector[6] LogBehaviorTree (Verbose) Child[0] "NewBehaviorTree::Sequence[9]" execution allowed by NewBehaviorTree::Blackboard Based Condition[8] LogBehaviorTree (Verbose) Search node update[Add]: NewBehaviorTree::Blackboard Based Condition[8] LogBehaviorTree (Verbose) Testing node: NewBehaviorTree::Sequence[9] LogBehaviorTree (Log) Update: Remove for auxiliary node: NewBehaviorTree::Blackboard Based Condition[2] LogBehaviorTree (Log) Update: Add for auxiliary node: NewBehaviorTree::Blackboard Based Condition[5] LogBehaviorTree (Log) Update: Add for auxiliary node: NewBehaviorTree::Blackboard Based Condition[8] LogBehaviorTree (Log) Update: Add for auxiliary node: NewBehaviorTree::MyServise_2[7] LogBehaviorTree (Verbose) NewBehaviorTree::Blackboard Based Condition[8], ConditionalFlowAbort(always when passing) pass:0 executingBranch:0 abortPending:0 => skip LogBehaviorTree (VeryVerbose) BT(61830) schedule next tick 0.000000, asked 0.000000. LogBehaviorTree (Verbose) NewBehaviorTree::Blackboard Based Condition[5], ConditionalFlowAbort(always when passing) pass:0 executingBranch:0 abortPending:0 => skip LogBehaviorTree (VeryVerbose) BT(61830) schedule next tick 0.000000, asked 0.000000. LogBehaviorTree (Log) Execute task: NewBehaviorTree::Wait[10] LogBehaviorTree (Log) Task NewBehaviorTree::Wait[10] finished: InProgress LogBehaviorTree (Log) Task NewBehaviorTree::Wait[10] finished: Succeeded LogBehaviorTree (Log) Execution request by NewBehaviorTree::Wait[10] (result: Succeeded) LogBehaviorTree (Log) > skip: request by [0:10] that is in pending unregister aux nodes range [[0:9]...[0:11]] LogBehaviorTree (VeryVerbose) BT(61830) schedule next tick 0.000000, asked 0.000000.
When looking at the behavior tree, unable to leave the Wait node.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-126602 in the post.
2 |
Component | UE - AI - BehaviorTree |
---|---|
Affects Versions | 4.26, 4.27 |
Target Fix | 5.0 |
Fix Commit | 14384911 |
---|---|
Main Commit | 14384911 |
Created | Sep 14, 2021 |
---|---|
Resolved | Nov 29, 2021 |
Updated | Apr 22, 2022 |