Blueprints - 虚幻中的行为树(Behavior Tree)
一些以前的学习笔记归档;
简单的说,行为树可以让agent(代理,指可以自主活动的游戏角色等)做出决定,可以理解为AI的大脑;
行为树自上而下的从树的根节点(Root节点)开始读取树的结构,直到任务(Tasks)节点,这些任务会被执行并使得AI开始一个行动:
除了Tasks节点,为了基于具体情况来激活不同树分支,在根节点和任务节点之间还存在有其它可以改变执行流动方向的节点;UE4的行为树有4个基础类型的节点:Tasks节点、Composites节点、Decorators节点和Services节点;
Tasks节点包含了AI所需要执行的一个行动的逻辑代码;
Composites节点处在行为树里Tasks节点的上面位置,并且决定Tasks节点执行的顺序:
在说到Decorators节点和Services节点之前,首先要提到UE4行为树的一些特性:
行为树很快的能从根节点(Root节点)到叶节点(Task节点)进行迭代并同时做出决定,这意味着AI的状态转换在一瞬间就可以马上完成,看起来AI就像是马上对事物进行了响应;
但UE4的行为树并非每时每刻从Root节点到Task节点进行迭代,因为每一帧(实际可能并不是每帧,但这里只是为了说明方便)都一路从Root节点开始运行相对比较耗费性能,所以UE4的行为树的执行会停留在当前激活状态的Composite节点和它的子节点上,直到抵达整个序列的末尾或者composite节点收到中止命令;
那么,在只有Tasks节点和Composites节点的行为树中,例如以下情况:
所以,UE4引入了像Decorators节点和Services节点等来处理诸如此类的问题;
Services节点是一种可以附着到一个Composites节点的附加类型节点,用来检测和更新数据来给agent做出决定;
Decorators节点同样也是附着到Composites节点的附加类型节点,用来负责决定它们的子节点是否可以运行;
然后修改上图的行为树,使用上Decorators节点和Services节点:
那么,在修改后,当AI正处在执行闲置状态(Idle)的过程中,忽然Service节点检测到看到了玩家,Idle状态将会中止,会进入Combat的运行状态,不会再有迟钝的表现;