总算是搞出来了,不过我不确定这样算不算比较正规的做法,因为我只是想多一个检测条件再返回中止,结果加了很多修饰符才实现,感觉这种比较基础的需求官方应该有配套的方式。
这个条件中止的官方文档真的讲的很浅,只有基本用法,到处都找不到更加深入的应用教程,所以我想说说我的一些经验,也不算是教程只是简单说说我踩出来的坑。
1.只有Conditional task的状态变化才能引起中断,用actions是不会触发中断的。
2.调试的时候注意Conditional task的×有两种的,一种是带圈的表示进行了检测返回失败,另一种不带圈的是表示没有执行这个节点。
3.我在Abort Type中使用Self时不会执行检测,这一块可能是我的误解,但我建议先使用Lower Priority,至少可以排除这块的问题。
4.条件中止嵌套的问题,不同的Abort Type类型不能嵌套。
5.如果在Composites中找不到合适节点,可以看看能否用Decorators中的修饰符组合出需要的判断方式,注意有些修饰符会导致Conditional task不能持续判断,注意排除这部分问题。
6.只有在运行状态中的任务才可以被条件中止,节点持续的发绿就是在运行状态。
7.最后奉上我目前的行为树,如果有类似的需求可以参考。左边是巡逻行为,分为检测玩家和执行巡逻两块,最左下角的检查器检测到其中一个镭射检测到玩家后因为中断修饰符和上方的序列,整个左边都会返回失败,然后最上方的选择器就会选择右边的前往玩家位置的行为,在执行完前往玩家位置后会因为最上方的中继器重新开始检测。然后就是这个逆变器,加入这个修饰符是因为上方使用的是序列,没有逆变器的情况下镭射会先因为检测不到玩家返回失败,导致之后的巡逻行为无法触发。然后巡逻行为上的2个修饰符是因为,在最上方用于重启整个行为的中继器会和巡逻的行为冲突,在巡逻还未完成的时候就重启整个行为(这点我也很奇怪明明还在运行状态为什么就直接启动了重启),加上中继器后就可以让巡逻行为在下方内部自己内部任务完成后再重复执行了,加上中断后可以通过条件中止停止中继器。