> 技术文档 > Unity里的Behavior Designer(行为树设计)_unity behavior designer

Unity里的Behavior Designer(行为树设计)_unity behavior designer

Behavior Designer主要是用于做AI

下面是Behavior Designer的图形解释:

node(节点) ,这个是树的结点特征!

这是树的主要结构 

 selector的分支结构

sequence分支的结构 

 sequence的细分结构

下面是学习借鉴的这篇博客

【游戏开发教程】BehaviorDesigner插件制作AI行为树(Unity | 保姆级教程 | 动态图演示 | Unity2021最新版)_behavior designer-CSDN博客

1.插件界面 

1、打开编辑器

点击菜单Tools->Behavior Designer->Editor即可打开编辑器窗口.

 界面如下图:

2.界面介绍 

界面可以划分为3个区域,如下图:

第一个区域是行为树的组织区域,我们的行为树节点就是在这个区域上进行连线的;

第二个区域顶部是四个标签页:BehaviorTasksVariablesInspector,默认是Tasks标签页,显示的是节点列表;

Behavior    对整个行为树的设置,比如行为树名称、是否激活时立即执行、执行完毕后是否重新执行等设置
Tasks    任务节点列表,比如Composities(符合节点)、Decorators(装饰节点)、Actions(行为节点)等等
Variables    行为树变量,可以设置全局变量,也可以设置行为树自身的变量
Inspector    查看节点详细信息,设置节点参数

第三个区域按钮功能如下:

 

 2.快速制作一棵行为树

1.创建物体

首先在场景中创建一个物体,可以是任何物体,比如你想控制角色,那么这个物体就可以是你的角色模型,这里我创建一个空物体,重命名为BehaviorTreeObj

2. 挂BehaviorTree脚本

这一步其实就是给物体挂上BehaviorTree组件,我们也可以通过Add Component手动添加BehaviorTree组件。

3. 添加Task节点

上面的行为树的执行过程是怎么样的呢?想要搞清楚就得先知道行为树的执行顺序:从左到右,并且深度优先。

 

1、Sequence:顺序节点
1.1:节点介绍

顾名思义,顺序节点就是从左到右挨个顺序执行,当所有子节点都返回Success时,它才返回Success。

 6.Random Selector:随机选择节点
6.1节点介绍

7、Random Sequence:随机顺序节点
8、Parallel Complete:并行竞争节点
9、Selector Evaluator:评估选择节点

节点介绍

这个节点不是很好理解,它的逻辑是这样的,从左到右顺序执行,如果遇到子节点返回Success,则立即结束,并返回Success,否则继续执行下一个子节点。

 

 它和Selector节点有啥区别?

上面我用的是Log节点,会立即返回结果,如果是用Wait节点,则会有Running状态,这个Selector Evaluator节点是个固执的强迫症节点,它认为子节点应该给它返回Success,如果子节点返回了Failure,它会硬着头皮执行下一子节点,但是,一旦下一个子节点处于Running状态,它就会像个渣男一样毫不犹豫地打断并返回第一个子节点,重新执行,只要有机会它就想要一个Success结果,如果后续的子节点都是立即返回成功或失败,而没有Running状态,则它会接受后续子节点的Success,也就是说,它也不是非得第一个子节点不娶,后面的子节点只要立刻Success,它就不打断去重新找第一个子节点了,相当地渣男啊!

看,第二任只要考虑一下(Running状态),它就会立即打断回去执行初恋,

 如果第二任立即答应了,它就会接受第二任的结果。

如果第二任直接给个Failure,那么这个渣男会去骚扰路人甲,如果路人甲给它Success,它就会爱上路人甲。

 如果路人甲立即给它Failure,这个渣男才会死心。

 口诀:评估选择节点,渣男一个,从左到右,遇真即真,遇假继续,Runing时机打断,从头来过。

七、中断

复合节点有中断的权利,我们可以选中某个复合节点,然后点击Inspector,设置它的中断模式。

默认为None,即无中断,
这里我先解释一下什么是中断,比如你正在睡觉,突然地震了,这个时候睡觉就要被中断,执行逃跑的逻辑,命要紧。
复合节点的中断控制是由谁来调度的呢?执行行为树的时候,会自动创建一个Behavior Manager对象,上面挂着BehaviorManager脚本,我们的行为树的执行都是由这个BehaviorManager来调度的,它就是最高司令。

 1、Self中断

一个复合节点下可以有多个子节点,假设现在有两个子节点,假设此时正在执行第二个子节点(Running状态),突然来了一个事件,需要中断第二个子节点,立即执行第一个子节点,这里就可以使用Self中断,Self其实是站在复合节点的角度的,就是中断复合节点自己。

假设你去朋友家打游戏,你决定打完游戏就回家,如果打游戏过程中,老妈打电话喊你回家吃饭,那么就中断打游戏,回家。

行为树如下

没有按下A键的执行效果如下,打完游戏开开心心回家。

 

 打游戏过程中,按下A键,中断打游戏,回家。

 2、Lower Priority中断

我们以睡觉的时候发生地震为例,演示一下Lower Priority中断。
睡觉的时候如果发生地震,需要中断睡觉,执行逃命逻辑。
如下,睡觉节点与Sequence节点是平级关系,并且睡觉节点在右边,属于低优先级,当正在执行睡觉节点时,左边的Sequence节点想要中断右边的睡觉节点,设置Lower Priority中断即可。

我们从中断的图标也可以看出,它指向右边,表示中断右边的节点的意思。

3、Both中断:两者都中断

Both中断其实就是SelfLower Priority都中断。如下

八、Variables:行为树成员变量

我们点击Variables,可以给行为树添加成员变量,也可以查看已添加的成员变量。