Observer Aborts: None, Self, Lower Priority, Both

The explanation given in this chapter didn’t connect with me, at all. So I had to go searching. And I found one that’s clear, here:

…quoting from that page…

If “Observer aborts” is “None”, then only during traditional BT execution will the conditional check of a decorator matter. So for example, if you have a simple check such as “is Blackboard entry Enemy set?” (i.e. not NULL), it will only check as the execution moves through the node into the subtree. If later it becomes NULL in that subtree, execution won’t instantly leave the subtree (though it might exit due to failure of some task that requires that value). Similarly, if execution is in a lower priority subtree, it won’t instantly know that the condition for a higher priority task has been satisfied, so the lower priority task will continue until it succeeds or fails normally. Then, execution through the higher priority branch may discover that that task can be executed.

However, if you set “Observer Aborts” to “Self”, then while execution remains in the subtree, if the status of that decorator changes, it will cause the tree to abort immediately. For example, if the Enemy becomes “Is Not Set” (NULL)), it will abort (basically failing up the tree).

If you set “Observer Aborts” to “Lower Priority”, then while the execution is in a lower priority subtree, if the condition is satisfied such that execution can move into the higher priority subtree, then the lower subtree will abort immediately. So, if the behavior tree is doing the “Idle” behavior and the Enemy becomes set it will immediately abort the lower priority tree (“Idle”) and begin the higher priority tree that was prevented by the “Has Enemy” node being false previously.

“Observer Aborts” “Both” means that it will abort both “Self” AND “Lower Priority” trees.

NOTE: If there are multiple nodes that are all set to abort “Lower Priority” (or “Both”), they will all have to be satisfied before the lower priority tree will be aborted. That way, you won’t have to worry about separate value changes repeatedly aborting your lower priority tasks when the higher priority task can’t actually execute.

Privacy & Terms