个人理解,理解不当之处欢迎指教。
Abort Self:
自我打断:
will reevaluate when any task within the current branch is active.
直观解释:
条件变化时,主动让出执行权。
打断条件:
1. 当前分支(设置自我打断的组合节点所处分支)处于Running状态。
2. 条件节点是当前组合节点的直接子节点(不包括孙子节点)。
3. 条件节点优先级比Running分支的优先级高。
4. 条件节点的状态发生变化。

例如上图,当 Int Comparison 这个条件节点满足条件时,将会执行Wait节点。
某一时刻,Int Comparison 这个条件节点变为不满足时,则会打断Wait节点,去执行Log节点。
Abort Lower Priority:
打断比我优先级低的分支:
will reevaluate when any task to the right of the current branch is active.
直观解释:
条件变化时,从低优先级的分支抢夺执行权。
打断条件:
- 当前组合节点(设置打断的组合节点)没有在Running状态,且已经执行结束。
- 比当前组合节点低优先级的兄弟节点所在的分支处于Running状态,也就是说当前组合节点的父节点处于Running状态。
- 条件节点是当前组合节点的直接子节点(不包括孙子节点)。
- 条件节点处于执行路径上。例如父节点为selector节点,只会重新评估到第一个成功的条件节点为止的节点序列。
- 条件节点的状态发生变化。
- 设置低优先级打断的组合节点可以嵌套。用来将孙子辈的节点加入重新评估列表。但是嵌套不能断层。

例如上图:
- 三个条件节点中,条件节点2或条件节点3的状态发生变化时会进行重新评估,有可能打断Wait节点的运行状态。
- 注意选择节点2和选择节点3,外加顺序节点1都必须设置打断低优先级,条件节点2和条件节点3才会纳入重新评估列表。
- 由于选择节点1没有设置打断,所以条件节点1不纳入重新评估列表。
- 如果一开始条件节点2为成功状态,由于Selector的短路操作,条件节点3不会纳入重新评估列表。
待重新评估条件节点列表节点范围:
1. 首先确定Running分支路径(以上图片绿色节点所组成的路径)。
2. 自我打断:
如果Running分支路径上的组合节点设置了自我打断。则该组合节点的直接子节点中的所有高优先级条件节点纳入重新评估节点列表。
3. 打断低优先级:
如果组合节点设置了打断低优先级,且不在Running状态,其父节点在Running状态,也就是说低优先级的兄弟节点在Running状态。
①则该组合节点子节点中的已评估条件节点纳入重新评估节点列表。
②如果该组合节点的子节点中的已评估的节点为组合节点,且设置了打断低优先级,则该子节点的子节点(孙子节点)中的已评估条件节点纳入重新评估节点列表。该方式可以无限嵌套。
行为树执行过程中,待重新评估列表生成规则:
1. Tick一颗行为树为先序遍历。
2. 需要待重新评估的子节点保存在父组合节点的待重新评估列表中(包括组合节点和条件节点)。
3. 待评估节点列表生成规则入下:
组合节点执行子节点的过程中:
1. 组合节点执行时,将执行路径中的【子组合节点】加入待重新评估列表。
2. 设置了【下打断/全打断】的【组合节点】执行时, 将将执行路径中的【子条件节点】加入待重新评估列表。
组合节点执行完毕时:
1. 不打断,下打断
没当前组合节点所在分支子树什么事了,需要清空本分支所在子树的所有待评估列表。
具体步骤:
1. 将子树中设置了【右打断/全打断】的【组合节点】的评估列表清空。
遍历过程中,如果遇到没有设置右打断的组合节点,则不再继续清理该组合节点所在分支的子树。
2. 清空当前组合节点的待重新评估列表。
2. 右打断
将执行路径中的【子条件节点】加入待评估列表。
3. 全打断 ( Abort Self | Abort Lower Priority )
不执行操作。
本文深入解析了行为树中的自我打断与低优先级打断机制,阐述了这两种打断方式的工作原理,包括打断的条件、节点的重新评估过程及执行规则,帮助读者更好地理解和应用行为树。
2915

被折叠的 条评论
为什么被折叠?



