引言
在代码里面动态的操作单颗行为树 以及 管理所有的行为树,也是一个很重要的事情。
一、操作单颗树
这是我们项目里面,一个敌人绑定了行为树,自动创建的behavior tree 脚本。
红框放大:
行为树组件包含以下几个属性:
当我们有需要的时候,如何代码操作这些变量呢?
(1)我们必须先找到要操作的树
找树的方法1:定义一个Public的 BehaviorTree tree = new BehaviorTree();,然后面板拖拽赋值。
找树的方法2:定义一个privarte的 BehaviorTree tree = new BehaviorTree();,然后通过GameObject的Find查找物体,然后获得物体上面的组件来得到的。
(2)代码操作该树
**using BehaviorDesigner.Runtime.Tasks;//**引用不可少
using BehaviorDesigner.Runtime;
public class Tree : MonoBehaviour {
public BehaviorTree tree = new BehaviorTree();
void Start () {
tree.enabled = false;
var a = tree.GetAllVariables();
tree.StartWhenEnabled = false;
var b = tree.FindTasksWithName("AI_Daze");
}
}
上面代码只是简单的演示一下,可以操作行为树的数据。其实 面板截图里面的所有变量都可以操作,除此之外,tree还有很多的属性和方法都可以操作。
二、管理所有树
当行为树运行时,将会自动创建一个带有行为管理器组件的新游戏对象,并且该对象上面绑有 behavior manager组件。此组件管理你场景中所有的执行的行为树
你可以控制行为树的更新类型,以及更新时间等等
Update Interval:更新频率
- Every Frame:每帧都更新行为树
- Specify Seconds:定义个一个更新间隔时间
- Manual:手动调用更新,选择这个后需要通过脚本来调用行为树的更新
Task Execution Type:任务执行类型
- No Duplicates:不重复
- Repeater Task:重复任务节点。如果设置成了5,那么每帧被执行5次
BehaviorManager.instance.Tick();
此外,如果你想让不同的行为树都有各自独立的更新间隔的话,可以这样:
BehaviorManager.instance.Tick(BehaviorTree);
更多方法,请查看BehaviorManager类