复杂行为树
以NodeCanvas为例,一颗复杂的行为树可以表现如下
这种结构有个弊端:
条件判定,不方便法执行中断
比如其中一棵子树处于Running状态,这时候如果需要一个条件判定,打断这个Running状态,是非常困难的。
即便在每个任务的条件节点里去判断,条件也会变得复杂而难以管理
解决办法
采用分层机制,分为决策层与执行层两部分。
所有的决策统一在一棵子树处理,按照决策的结果,在另一颗子树里检测决策的结果,然后执行相应的行为。
如下图所示:
注意点
1. 决策层可以设置为永远返回true,意义在于不去影响整个行为树的结果
2. 执行层依据决策的结果,去判断是否要执行某种行为,如果决策的结果不匹配任何行为,则返回false
3. 决策层,如果逻辑非常复杂,其实也可以不放在行为树里面,直接通过代码来集中处理也是可以的,会更加灵活
4. 执行层,只关心决策的结果,和具体的行为