
正文
BehaviorTree.CPP行为树BT的介绍(一)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
节点类型
-
ControlNode
是可以具有1到N个子节点的节点。一旦接收到
tick
,
tick
可以传播到一个或多个子节点。
-
DecoratorNodes
与
ControlNode
相似,但只能有一个子节点。
-
ActionNode
是叶子且没有子节点。用户应该实现自己的
ActionNode
来执行实际的任务。
-
ConditionNode
与
ActionNode
一样,但是总是
atomic【原子】
和
synchronous【同步】
,即它们不得返回RUNNING。它们不应更改系统的状态。
第一个ControlNode:
Sequence[序列]
tick
,
tick
可以传播到一个或多个子节点。
ControlNode
相似,但只能有一个子节点。
ActionNode
来执行实际的任务。
ActionNode
一样,但是总是
atomic【原子】
和
synchronous【同步】
,即它们不得返回RUNNING。它们不应更改系统的状态。
Sequence[序列]
最基本且最常用的
ControlNode
:
SequenceNode
。
ControlNode
的子节点始终是有序的;执行顺序是从左到右。
简而言之:
-
如果子节点返回
SUCCESS,则tick下一个 -
如果一个子节点返回
FAILURE,则子节点不再去tick,并且该序列返回FAILURE。 -
如果
所有
子节点返回
SUCCESS,则序列也返回SUCCESS。
Decorators[装饰器]
根据
DecoratorNode
的类型可以取决该节点的目的:
- 转换从子节点接收到的结果
- 停止执行子节点
-
根据
Decorators的类型去重复的tick子节点
第二个ControlNode:
Fallback[后备]
FallbackNodes
(也称为“选择器
Selectors
”)是可以表达备用策略的节点,顾名思义,如果子节点返回
FAILURE
,下一步改怎么做。
按照顺序
tick
子节点,并:
-
如果子节点返回
FAILURE,则tick下一个。 -
如果子节点返回
SUCCESS,则不再tick任何子节点并且Fallback返回SUCCESS。 -
如果所有子节点返回
FAILURE,则Fallback也返回FAILURE。
原文







