Unity 行为树-管理

引言

  在代码里面动态的操作单颗行为树 以及 管理所有的行为树,也是一个很重要的事情。


 一、操作单颗树

这是我们项目里面,一个敌人绑定了行为树,自动创建的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类

 

 

 

 

posted @ 2018-10-31 21:21  激情1995  阅读(1677)  评论(0编辑  收藏  举报