Unity Behavior Tree的使用

先展示下各个用法组件

Sequence 与 遍历下面所有字节点,一直到false,主节点返回flase

除非全部为true 住节点返回success


Selector

类似||,只要一个子节点为true,主节点为success


Parallel 类似 Squence但是不按顺序来


Parallel Selector 按照优先级遍历字节点

只要有一个子节点为true 主节点为success


Random Selector 随机选择一个字节点

选中的节点返回为true 主节点就是success


Random Sequence 类似第一Squence个

只不过是随机遍历的


Selector Evaluator 从优先级低到高遍历节点

一直到为true的子节点,如果都是false则返回failure


Conditionals 判断条件


Random Probability 随机值返回


Compare Field Value 对比value是否相等


Has Received Event(是否接收到事件)


Decorators(修饰器)节点

这种节点的功能是用来包装另一个节点 (只能有一个子节点)

可以修改子节点的行为,子节点发success ,用这个可以反过来处理


Conditional Evaluator (条件节点的评估) 装饰节点

1:reevaluate:条件节点是否每帧都重新评估

2:conditionalTask 要被评估的条件节点,如果被评估的节点success,那么就运行,如果failure就返回,只评估一次


Interrupt(打断)装饰

触发这个,则打断下方所有子节点,如果没打断,则返回子节点的结果


Inverter(取反)装饰节点

把得到的结果取反发给上层


Repeater(重复/循环)装饰节点

子节点为true就一直循环,直到返回failure


Return Failure (返回失败)装饰节点

如果子节点不是running,则返回failure


Return Success(返回正确)装饰节点

是success或者failure则返回success


Until Success(直到成功)装饰节点

同上,反之

是running则返回running


Task Guard(任务守卫)装饰节点

相当于多线程的Lock,并行的时候会先后触发,而不是一起触发


Until Failure(直到失败)装饰节点

直到子节点返回failure,不然就一直执行子节点 类似Repeater


举个例子


举个栗子

Selector会判断下面三个条件脚本下面的  public override TaskStatus OverrideStatus(TaskStatus stat)的返回值(是继承Composite,如果继承Action 就是看OnUpdate的返回值)

如果为 1为failure  则执行2, 2为Failure则执行3...   只要有一个为true 主节点为true

不过即便1为Failure, 1下面的分支还是会进去判断

此外自定义的方块可以继承创建的主类别  比如Action 以及 Composite那四个

想在自定义的类别里实现Selector的功能的话,进去复制到自己的脚本即可



关于数值

可以自己定义静态类,或者其他脚本获取

插件带的共享的值


添加全局变量

添加名称,选择类型,最后点击ADD

例如我下面的index就是自己添加的


但是还是需要在每一个块里面获取到挂在面板上的  BehaviorTree脚本  

就是 behaviorTree = GetComponent<BehaviorTree>(); 这样的...

然后才能在各个类里

 var index = behaviorTree.GetVariable("index");

注意Index的类型是ShardVariable 需要转换


behaviour = gameObject.GetComponent<BehaviorTree>();

        var index = behaviour.GetVariable("index");   //获取

        Debug.Log("index" + index);

        int ind = 2;

        behaviour.SetVariable("index", (SharedInt)ind); //保存

        index = behaviour.GetVariable("index");

        Debug.Log("index" + index); //确认数值被替换

此外


四种Above类型的说明

面板上的IsInstant可以设置暂停调用 


关于脚本


public可以在点击块后,在左边窗口的Inspector里找到变量

[TaskDescription("文本")] 在Class上方加入这个,可以有块的说明文本

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容