Unity3D行为树插件BehaviorDesigner(一,什
行为树在人工智能游戏中很受欢迎,像《光晕 2》就是一个使用行为树并火起来的游戏。行为树的有点就是很容易理解并且是可视化的编辑。
下面来了解一下行为树:有四种不同类型的 task(任务): 包括 action(行为),composite(复合),conditional(条件),decorator(修饰符)。 action(行为)可能很容易理解,因为他们在某种程度上改变游戏的状态和结果。
conditional(条件):用来判断某些游戏条件是否满足,例如:在上图中的行为树中,有两个 conditional(条件)节点,两个 action(行为)节点 前两个 conditional(条件)用来检查是否需有敌人,并确保是否有足够的子弹。如果这些条件都是真的,那么这两个 task(任务)将被执行,并执行后续任务,如果有 conditional(条件)不满足,则不会执行后续操作,直接返回上层的 Sequence,并结束本次行为树的执行。之后的是一个并行节点(parallel), 下面的两个 action(行为)第一个负责计算伤害,第二个负责播放射击动画,他们是同时发生的。这里你完全可以把后面的两个 action(行为)作为单独的一个行为树。
composite(复合):从上图中可以看出,Sequence 和 parallel 属于 composite(复合)节点。一个是顺序执行,一个是并列执行。
decorator(修饰符):这个类型的节点只能有一个子节点。它的功能是修改子任务的行为。在上面的例子中,我们没有使用 decorator(修饰符),如果 你需要类似于中断操作的话会用得到这个 decorator(修饰符)类型,举个例子:一个收集资源的操作,它可能有一个中断节点,这个节点判断是否被攻击,如果被攻击则中断收集资源操作。decorator(修饰符)的另一个应用场合是重复执行子任务 X 次,或者执行子任务直到完成!
行为树还有一个重要话题,那就是返回状态。有时候一个 task(任务)需要多帧才能完成。例如,大多数动画不会在一帧开始并结束。此外有 conditional (条件)的任务需要一种方法来告诉他们的父任务条件是否正确,以便让父节点确定子节点的执行顺序。这两个问题都可以使用 status(状态)来解决。一个任务有三种不同状态:运行,成功或者失败。在第一个例子中,射击动画的 task 任务只有一个 status 状态,而确定敌人的条件是在 Within Sight 任务中返回的,如果返回失败,也就是不在视野中则不会执行到后面的任务。