结束(End)节点可以使用于行为树执行过程中的强制返回,即终止该行为树的全部执行,整个行为树直接返回当前结束节点所配置的“结束状态”值,如下图所示:
在上图中,当执行到结束节点时,行为树直接返回Success,不再执行下面ID为0的动作节点。
可以为结束节点配置“结束状态”属性,如下图所示:
上面的“结束状态”可以是一个常量,也可以是成员属性或方法的返回值,表示行为树执行到结束节点时,强制返回“结束状态”所配置的当前值。
注意:只有“结束状态”的当前值是Success或Failure时,行为树才会结束并返回该值;为Invalid或Running时,该结束节点不起作用,行为树接着执行。
此外,还有一个属性“结束外层树”,该属性用于表示在子树中的结束节点返回时,是否需要返回该子树所在的父树。
例如,创建一个带有结束节点的子树subtree1,如下图所示:
调用该子树的父树maintree1如下图所示:
如果子树subtree1中结束节点的“结束外层树”属性没有勾选,那么在执行父树maintree1的ID为4的子树节点时,会进入子树subtree1中,在该子树中执行到ID为3的结束节点时,会直接返回Success,不再执行ID为2的动作节点。子树subtree1返回后,回到父树maintree1中,由于子树subtree1中的结束节点没有勾选“结束外层树”属性,父树maintree1中ID为5的动作节点会继续得到执行。
但是如果勾选了子树subtree1中结束节点的“结束外层树”属性,则上述的执行过程会有所变化,也即子树subree1返回Success后,父树maintree1也直接返回Success,父树maintree1中ID为5的动作节点不再执行。
具体的执行逻辑可以查看behaviortree/nodes/actions/end.cpp