先展示下各个用法组件
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); //确认数值被替换
此外

面板上的IsInstant可以设置暂停调用
关于脚本
public可以在点击块后,在左边窗口的Inspector里找到变量
[TaskDescription("文本")] 在Class上方加入这个,可以有块的说明文本
网友评论