Behavior Tree Branch Not Aborting Self

Hey, I’m having an issue with a behavior tree, where I’ve got a decorator on a branch using an ‘is set’ on a boolean key, and an abort on value changed, but when the blackboard key is changing from true to false, it’s ignoring the change and continuing with execution of the branch

You can see the value of the key on the right where ‘AttackCommand’ is false, but it’s still executing the branch.

Is there anything I’m missing?

1 Like

Does the other branch also have “receive attack command” decorator? How about “Is target alive” - does it keep its value?

Do you have more decorators in the other branch?

Could any of those 2+ decorators preventing the execution of the other branch?

The other branch has the AttackCommand decorator as an ‘is not set’ predicate, which also serves as an abort self on that other branch as well, the other branch also has two additional decorators - a Vector which again also must be set and aborts self on value change, and another boolean decorator ‘MoveCommand’ which must also be set.

So to explain the functionality a bit more, the left branch is a ‘move command’ branch, when the AI controller is issued with a move command, it sets a target location for where to move to, sets AttackCommand to false, and sets MoveCommand to true, which are the three decorators.

The right branch is the ‘attack command’ branch, whereas when the AI controller is issued with an attack command, it sets the target location for where to move to, sets MoveCommand to false, and AttackCommand to true.

It will successfully execute and interrupt the move command branch as intended, but when it receives the attack command, when the AI is moving to the given location, if it’s given a move command mid way through its move to location and the booleans are all set as described above, it doesn’t interrupt the attack command branch, instead it will only execute the move command branch after the AI finishes moving to the attack location - even though there are no variable changes afterward.

I just tried out removing the is target alive and still has the same behavior - though my assumption was that all predicates had to evaluate to true for a branch to execute?

Other than the conditions are not met, I’m also unable to see what the issue may be.

So I ended up finding out the issue of why the branch wasn’t aborting when the decorator changed status, in the MoveToPlayerLocation task I created, I was using a ‘Move To Location or Actor’ node, and didn’t notice that it had a boolean ‘Lock AILogic’ checked, with that unchecked it now aborts properly

318001-move.png

2 Likes