(1)行为树组件:Behavior Tree Component
如下图:
这个组件记录了你的行为树的结构以及一些 BehaviorDesigner 配置信息。
下面的 API 用来启动和停止你的行为树
public void EnableBehavior();
public void DisableBehavior(bool pause = false);
你可以通过下面的这些方法查找行为树中的相关节点 task 任务
TaskType FindTask< TaskType >();
List< TaskType > FindTasks< TaskType >();
Task FindTaskWithName(string taskName);
List< Task > FindTasksWithName(string taskName);
行为树当前的执行状态可以像下面这样获取: behaviorTree.ExecutionStatus; 当行为树运行结束后会有一个状态被返回,返回的接口可能是 Success 成功或者是 Failure 失败,这个结构依赖于行为树中的各个 子节点 Task 任务的返回值, 你可以对行为树监听以下事件:
OnBehaviorStart
OnBehaviorRestart
OnBehaviorEnd
行为树组件包含以下几个属性:
Behavior Name 行为树的名称
Behavior Description 行为树的描述信息
External Behavior 一个外部行为树的资源引用,行为树可以被导出成外部序列化文件(ScriptableObject 文件)单独存储,并被其他行为树引用,或 者作为子节点任务而使用,方便了行为树的共用。
Group 行为树的分组编号,用来将行为树分组,可以用来方便的查找到特定的行为树。
Start When Enabled 如果设置为 true,那么当这个行为树组件 enabled 的时候,这个行为树就会被执行。
Pause When Disabled 如果设置为 true,那么当这个行为树组件 disabled 的时候,这个行为树就会被暂停。
Restart When Complete 如果设置为 true,那么当这个行为树组件执行结束的时候,这个行为树就会被重新执行。
Reset Values On Restart 如果设置为 true,那么当这个行为树组件 reset 的时候,这个行为树就会被重新执行
Log Task Changes 当设置为 true 是,这个行为树下只要 task 流程发生变化就会打印一条 log 日志到控制台中。
(2)用脚本创建一个行为树
在某些情况下,你可能想要通过脚本在运行时创建一个行为树,而不是直接使用拖拽或者面板操作去创建!例如:如果你已经导 出了一个外部行为树,并想通过脚本创建它的话,可以如下这么做:
在这个例子中公共变量 behaviorTree 包含你引用的外部行为树。新创建的行为树在创建时将自动加载所有子节点任务。通过设置 startWhenEnabled 为 false 来阻止行为树在创建后立刻被执行,你可以通过 bt.enabledBehavior()来开启行为树.
(3)Behavior Manager 行为管理器
当运行一个行为树的时候,会在场景中自动创建一个名称为BehaviorManager的GameObject,并添加了组件脚本BehaviorManage.cs.
这个脚本用来管理所有场景中的行为树。你可以控制行为树的更新类型,以及更新时间等等。”Every Frame”是每帧都更新行为树。”Specify Seconds”定义个一个更新间隔时 间。”Manual”是手动调用更新,选择这个后需要通过脚本来调用行为树的更新,例如下面这样: BehaviorManager.instance.Tick(); 此外,如果你想让不同的行为树都有各自独立的更新间隔的话,可以这样: BehaviorManager.instance.Tick(BehaviorTree);
Task Execution Type(任务执行类型)允许你指定行为树的执行次数,默认是“No Duplicates”(不复制,不重复)像下图中的这种循环操作可以简单的通过这类设置执行次数来实现。
Repeater Task(重复任务节点)设置成 5 次。如果 Task Execution Type(任务执行类型)被设置为“No Duplicates”(不复制,不重复),那么 Play Sound task(播放音乐任务节点)则会被每帧执行一次。如果 Task Execution Type(任务执行类型)被设置为 5,那么那么 Play Sound task(播放音乐任务节点)会在 每帧被执行 5 次。