之前做战斗的时候,都是用的状态机实现的,从逻辑上来看比较清晰,很容易把控流程,但不够直观。所以在空闲的时间,想研究一下Behaviour Designer,拓展一下技能。

关于Behaviour Designer 行为树

官方介绍:

Behavior Designer是一个为每个人-程序员,艺术家,设计师实现设计的行为树。Behavior Designer提供了一个强大的API,允许您轻松创建新任务。它提供了一个直观的可视化编辑器,具有广泛的第三方集成,使得无需编写一行代码就可以创建复杂的ai。

行为树有一些比较重要的概念,例如:如任务类型(动作、复合、条件和装饰)。

行为树面板介绍

初始界面是这样的:
1

下面截图分为四部分:

  1. 第1部分流程节点渲染绘制区域,在此面板创建行为树
  2. 第2部分是参数熟悉面板,可以编辑行为树的特定熟悉、添加新任务、创建新变量或者编辑任务的参数第2部分是一个属性面板。在属性面板中,您可以编辑行为树的特定属性、添加新任务、创建新变量或编辑任务的参数。
  3. 第3部分是工具栏,可以添加删除行为树等
  4. 第4部分是调试工具栏。可以运行、暂停、步近Unity。也有行为树错误数量的显示
2

操作工具栏说明:

3
  • 标签1:在你打开的行为树之间来回导航
  • 标签2:列出场景或项目中的所有行为树(包括预制件)
  • 标签3:列出场景中添加了行为树组件的任何游戏对象
  • 标签4:列出从标签3中选择的附加到GameObject的任何行为树。
  • 标签5:列出当前行为树引用的任何外部行为树
  • 标签6:删除当前选择的行为树。
  • 标签7:向GameObject添加一个新的行为树。
  • 标签8:保持当前行为树活动,即使你在层次结构或项目窗口中选择了不同的游戏对象
  • 标签9:将行为树导出到外部行为树资产。
  • 标签10:打开查找对话框,可以搜索你的行为树。
  • 标签11:获取当前行为树的截图。
  • 标签12:显示行为设计者的偏好。

创建简单的自定义行为树

创建行为树需要选择一个GameObject,在行为树面板上会显示选择的GameObject

4

可以根据在上述1部分,右键创建一个行为树,选择的GameObject会自动添加Behaviour Tree组件

5

自定义一个Conditional:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using BehaviorDesigner.Runtime.Tasks;
using BehaviorDesigner.Runtime;
using UnityEngine;

public class TestContional : Conditional
{
public SharedFloat randomNum;
public override TaskStatus OnUpdate()
{
randomNum = Random.Range(0, 10);
if (randomNum.Value > 5)
{
return TaskStatus.Success;
}

return TaskStatus.Failure;
}
}

自定义一个Action:

1
2
3
4
5
6
7
8
9
10
11
12
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;

public class TestAction : Action
{
public SharedTransform target;
public override TaskStatus OnUpdate()
{
target.Value.transform.Translate(1, 1,1 );
return TaskStatus.Success;
}
}
6

将创建的BD挂到空节点,并重置坐标:

7

运行调试BD:

此时随机数是4,条件不满足:

8

重新调试,此时随机数是7,满足条件,执行Action,节点坐标发生变化:

9