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个区域,如下图:
第一个区域是行为树的组织区域,我们的行为树节点就是在这个区域上进行连线的;
第二个区域顶部是四个标签页:Behavior
、Tasks
、Variables
、Inspector
,默认是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
中断其实就是Self
和Lower Priority
都中断。如下
八、Variables:行为树成员变量
我们点击Variables
,可以给行为树添加成员变量,也可以查看已添加的成员变量。