怪物行为树案例_行为树概念与结构

行为树概念

行为树(behavior tree)的概念最早来源halo这款游戏里的ai控制结构,它通过类似于决策树的树形决策结构来选择当前环境下应该做出的具体行为。由于这种ai控制结构在配置、调试、复用之上的便利,行为树的使用也逐渐成为了现在游戏的主流ai配置方式。unreal现在自带了行为树功能,而unity也有很多行为树相关的插件。下图就是unreal中配置完成的一个简单的行为树结构 :

行为树样例

下面我们来简单解释一下这颗行为树的功能。unreal的行为树的执行流是从上到下,从左到右,每个节点执行之后都会有相应的返回值true 或者false, 返回之后控制权转移给当前节点的父节点,来确定下一步的执行:行为树在执行时的第一个入口是ROOT节点,所有的行为树都会有此root节点, 当root节点执行完成之后,会重新开始一次执行,类似于无终止条件的循环。

进入root节点之后,进入Ai State这个Selector节点,依次从左到右执行他的三个子节点,当任一节点执行返回true的时候则不再执行后续的子节点,直接返回true给父节点。这个节点的逻辑就是让被控制的Entity进入追逐玩家状态还是进入巡逻状态。

chase player节点是一个sequence,这个节点被一个decorator节点修饰,导致只有在has line of sight返回true的时候才能进入执行,如果decorator返回false则执行流回到Ai State节点。它的三个子节点会从左到右依次执行,用来控制Entity去追打玩家的具体步骤:

Rotate to face BB entry,朝向目标

BTT_ChasePlayer 设置自己进入追击状态,追击速度为500

Move To,移动到敌人位置

所以这个状态内,被控制的Entity会首先朝向敌对目标,然后设置自己为速度500的追逐状态,追逐到目标之后,返回true, 如果其中任意一个节点返回false,则后续子节点不再执行,当前节点也返回false。Patrol节点是一个不带decorator的Sequence,他执行的时候也是从左到右执行三个子节点:

BTT_FindRandomPatrol 设置自己为以自己为中心的随机巡逻状态,巡逻速度为125,巡逻半径为1000,获取半径上的一个随机点

Move To 移动上一个节点确定的位置

Wait 等待4-5秒

所以这个Patrol的执行内容就是,以125的速度走到以自身为中心的半径1000的圆的任意一点,走到之后等待4-5秒,然后返回。最后的等待1s是为了两个状态都无法进入的时候的fallback,避免root节点空跑占用cpu。

行为树定义

整个行为树就类似于我们写的一个函数调用,他的树形结构就类似于传说中的图形化编程。一颗行为树最终运行时,还依赖于他的执行环境,例如范围内有没有目标就可以让这棵样例行为树控制的Entity呈现出不同的表现。这些行为树的运行环境,我们可以抽象为一个key value的容器,叫做黑板Blackboard, 代表行为树的内部存储的所有参数。当一颗行为树在特定的黑板环境中运行时,行为树的控制权不断地在树形结构中转移,类似于程序计数器Progra

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值