I need help understanding Abort Types

snarlynarwhal

New member
I watched the video and read the docs, and I thought I understood Abort Types, but I cannot seem to understand the behavior in my own behavior tree.

Here's a screenshot of my current behavior tree:

Capture.PNG

I added the Lower Priority Abort Type to the first 3 upper-level sequencers, expecting them to re-evaluate behind the scenes, but none of the break points get hit after the execution moves to the right. Once it reaches the rightmost Keep Seeking, it runs indefinitely, never re-evaluating the other branches.
 
Last edited:
Okay so I discovered that changing the Abort Type for these two tasks made it function as I originally expected. But I still don't understand why. An explanation would be much appreciated.

1568056084790.png
 
Breakpoints won't fire when the aborts are reevaluating - they will only trigger when the actual task is entered. You can tell if a conditional abort is reevaluating based on the circle around the execution status of the task. In your original post your Check Distance and two Bool Comparison tasks are being reevaluated.
 
Okay that makes sense. Thank you for clarifying that! But I still do not understand why, in my second image, it does not work unless the two sequencers that I circled in red have an Abort Type of Both. I thought the parent sequencer having an Abort Type of Lower Priority would be enough to cause the entire branch to re-evaluate - I guess it is, but something else is going on? Without the two child sequencers having an Abort Type of Both, it never re-enters the left branch once it gets to the rightmost Keep Seeking task, and that's the part I'm having trouble understanding now.
 
I thought the parent sequencer having an Abort Type of Lower Priority would be enough to cause the entire branch to re-evaluat
Only the child conditional tasks will reevaluate. The abort can also trigger when the conditional status changes from success to failure or failure to success. If a conditional task continues to return the same execution status then an abort will never occur.
 
Ahhh okay so since the parent sequencer has no child conditional tasks in the original broken version, it automatically fails. Where as in the newer fixed version, the child sequencers succeed since they have the conditional tasks that need to get re-evaluated. Thanks so much for clarifying this! I do not know how many people incorrectly assume it re-evaluates the entire branch, but it might be worth emphasizing this behavior in the documentation. :)
 
Top