Behavior Designer文档-11(条件终止)

      条件终止(Conditional Aborts)允许你的行为树可以动态的响应改变,而不要大量杂乱的使用Interrupt/Perform去中断任务,这个功能非常类似Unreal Engine 4引擎里面的观察者终止功能(如果你用过UE4就可以了解到)。其他大多数行为树插件的实现方式是重新运行整个行为树,而条件终止则采用了更加优化的方式来实现,不需要重新运行整个行为树,例如下面的行为树:

Behavior Designer文档-11(条件终止)_第1张图片

     当上图的行为树运行的时候,如果左边的Conditonal任务满足条件则返回成功,那么将会立刻运行右边的Wait任务。Wait任务设置为等待10000秒(目的是让他一直运行)。当Wait任务在运行过程中,Conditonal任务突然不满足条件了,这个时候会返回失败,假如Sequence父任务是一个条件终止任务(备注:上图Sequence是普通任务,需要设置才是条件终止任务),那么它就会立刻终止Wait任务继续运行,然后按照行为树的运行设置去运行Sequence以外的其他任务。所有的复合任务类型都可以设置条件终止,如图Sequence任务中,Abort Type就是设置条件终止

Behavior Designer文档-11(条件终止)_第2张图片

       一共有4种条件终止类型:不终止(None),自我终止(Self),低级别终止(Lower Priority),双向终止(Both)。

类型 图示 功能

None

不终止

Behavior Designer文档-11(条件终止)_第3张图片

不进行条件终止

Self

自我终止

Behavior Designer文档-11(条件终止)_第4张图片
可以终止同一个父节点下的Action类型的任务

Lower Priority

低级别终止

Behavior Designer文档-11(条件终止)_第5张图片
设置成低级别终止的任务,具有比其他任务更高级的级别,当该任务条件发生改变时,可以终止其他任务

Both

双向终止

Behavior Designer文档-11(条件终止)_第6张图片
self和lower priority一起使用

      下面的例子使用了Lower Priority低级别终止:

Behavior Designer文档-11(条件终止)_第7张图片

       在上图例子中,左边Sequnce(顺序执行任务)设置了低级别终止。刚开始的时候左边分支的条件不满足,返回失败,于是Selector(选择执行任务)选择右边分支运行,过一段时间后,当左边分支的条件满足时候,左边分支因为有低级别雕件终止,所以终止了右边分支的任务,从而执行左边分支的action任务。

      在条件终止运行的时候,任务节点上会出现一个重复运行的ICON标志,表明行为树在重新判断条件,如图:


      条件终止可以进行嵌套。

      例如,有一个任务分支有两个任务,一个是能够看见敌人(can see object),另一个是可以听见敌人(can hear object)。任何一个任务满足条件的时候,都会运行Action任务。如下图,Selector任务具有条件终止,Sequence也具有条件终止,他们进行了嵌套。这样,看见敌人和听见敌人的任务就可以继续的监听,当满足条件时候终止其他低级别的任务,转而运行本分支任务。


      上图示例中selector任务必须附加条件终止,不然就不能进行持续的监听。



你可能感兴趣的:(Behavior Designer文档-11(条件终止))