工作中遇到了一个小的行为,考虑到需要使用权重打断机制,学习了一下。
首先,AbortType打断机制,我使用于继承condition的条件行为,条件行为,继承Action的行为好像是不行,之前有尝试一下,没有成功,不知道是不是其他的问题。认准条件判定!
说一下我对于Abort的理解吧:
1.None:没有任何打断的机制,按照行为树的规则依次从左到右边执行,左侧的权重高于右侧,上侧的高于下侧的,在默认是None的情况下,默认是按照正常的执行,当然你也可以通过在Action里面写方法,通过监听之类的来达到同样的效果,但是这不是人家官方都做了这个功能了,建议学习使用一下。
2.self:翻译为自身,理解为打断自身的行为。我的截图为做一个介绍,其实并非我真实的使用,在
单独使用这个打断方式的时候,确保第一次能进入这个行为序列,也就是我的AiForkliftGetCanUseEquip需先返回为true,否则会直接整个返回false,也就进入下一个sequence了,self也没有任何意义了,因为self只作用于自身,底下的分支有用。
按照官方的案例的用法是:比如你的条件判定是敌人与你的距离是100m,当条件满足的时候进入
下一步的行为开始追踪敌人,但是只要敌人还没追上,也就是必须确保这个分支还没有结束,判断敌人是否在100M内就会一直进行判定,当敌人跑的比你快的时候或者,判断的行为会从新进行评估,这时候不满足100M的条件的情况下,这个sequence就会返回false,从而打断了自身正在追踪敌人的行为,结束了这个追踪的过程。
3.lower priority:这个是通过优先级来判断的,作用于同级别的行为,这个的作用的条件也同样是,你同级别的consequence底下的子分支不能全部完成,这分非常重要,一旦全部完成了这个打断也会失去效果。
这边的案例是:首先执行判断敌人是否在100M内,这时候敌人如果不在100M内的话,sequence会直接返回false,进入下一个sequence,我的这个行为是巡逻,这边只要我的巡逻的行为不完成,一旦有敌人进入了我的100M的范围内,巡逻的行为就会被打断,从新回到判断敌人在100M内的行为,并返回True,然后进入追击敌人的行为。
4.both两者同时,可以理解为,既能被其他人打断,也能被自己打断,按照案例的效果为,执行巡逻,然后敌人进入100M内,然后就可以追踪敌人,追了一会儿发现敌人跑很快追不上,然后就会打断自身行为不追了,从新进入巡逻,等带新的100M范围内的敌人,因此反复。