Documentation

Learn how to use NodeCanvas

Reactive Evaluation

Behaviour Trees in NodeCanvas are designed with the ability to react to immediate changes which is a requirement for most modern fast-paced games.

Many Behaviour Tree nodes have a special option named “Dynamic”. With this option enabled the node will react immediately to child node status changes. Let’s take an example for convenience:

Suppose we have this simple behaviour tree where if “myBoolean” variable is true, then we will wait 1000 seconds (exaggerated on purpose), which resembles an action that can possibly take that much time. If while that action is Running the condition no longer holds true (myBoolean is false), then nothing will happen. The condition will not be evaluated until the next tree traversal.

Reactive1

To make this Sequencer Reactive, all we have to do is to enable its Dynamic option. As such, even while the action Wait 1000 seconds is running, if the condition becomes false, the action will be interrupted and the Sequencer will be re-evaluated, which will result in it returning Failure as it should.

Reactive2

Recursive Reactive Evaluation

The dynamic option works only in the scope of the node being Dynamic. So if you had the following behaviour tree, if while “Action 2” is running “myBoolean” becomes true, the Selector won’t really care about this change and “Action 2” will continue to run.

Reactive3

Making the Selector Dynamic as well will solve this correctly. So in the following tree, if “Action 2” is running and “myBoolean” becomes true, “Action 2” will be interrupted and the Sequencer will take over. As a consequence, since the condition is true, “Action 1” will execute. If the condition later becomes false, the Sequencer being Dynamic, will interrupt “Action 1” and return Failure.  Then the Selector will execute “Action 2”.

Reactive4

If you are making a game that needs reactive evaluation like for example an action or a realtime strategy game, then the Dynamic option is certain to help you.

It is worth noting that Actions specifically do not reset and re-evaluate in case their parent is Dynamic and this is done by design. This workflow is meant to be used with Conditions.

The Dynamic option can be found in the following Behaviour Tree Nodes:

  • Sequencer
  • Selector
  • Parallel
  • Conditional Decorator
Yes No Suggest edit
46 of 46 users found this section helpful
Suggest Edit