行为树(Behavior Tree)

行为树(BehaviorTree)是一种理解与编辑简单直接的AI逻辑方式,通过组合节点(顺序节点、选择节点、条件节点、执行节点)描述AI行为逻辑。它允许策划人员设计层次化AI结构,实现灵活的IF...ELSE...逻辑,同时减少对AI框架代码的修改需求。行为树的结构化方式便于实现各种复杂的AI逻辑,且易于维护。
摘要由CSDN通过智能技术生成

行为树(Behavior Tree)

如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现,但是再复杂的一般用经典的状态机来切换状态,但是编辑器写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。行为树,其实也是一种有限状态机,只不过形式上分层呈树结构,人称分层有限状态机(HFSM)。

行为树主要用四种节点(还有诸如:装饰节点等其他能更丰富功能的节点)来描述行为逻辑,顺序节点、选择节点、条件节点、执行节点。每一棵行为树表示一个AI逻辑,要执行这个AI逻辑,需要从根节点开始遍历执行整棵树;遍历执行的过程中,父节点根据其自身类别选择需要执行的子节点并执行之,子节点执行完后将执行结果返回给父节点。节点从结构上分为两类:组合节点、叶节点,所谓组合节点就是出度大于0的节点,叶节点一般用来放置执行逻辑和条件判断。

--顺序节点(Sequence):组合节点,顺序执行子节点,只要碰到一个子节点返回FALSE,则返回FALSE;否则返回TRUE。

--选择节点(Selector):组合节点,顺序执行子节点,只要碰到一个子节点返回TRUE,则返回TRUE;否则返回FALSE。

--条件节点(Condition):叶节点,执行条件判断,返回判断结果。

--执行节点(Action):叶节点,执行设定的动作,一般返回TRUE。

比如:我们要表达一个最简单的NPC AI :

    
    
如果碰到主角,打招呼;否则,睡觉。

行为树的结构如下(其中黄色的是装饰节点,这里当做CD定时器来处理,在CD时间内这个节点一直返回FALSE,否则返回TRUE):

设计好这个图,实现时将其转化为xml或者lua table或者json或者其他层次化的表示供程序读入,并构建好树对象,整个执行流程伪代码可能是这样的:

复制代码
    
    
function gameBrain.init() bt = btreee:new() bt. load ( " test.xml " ) end function gameBrain.update() bt.execute() end function main_cycle() -- ... brain.update() -- ... end
复制代码

-------------------------------

有了这样一颗行为树,如果我们改变Condition的条件及两个不同的Action的具体操作,就可以实现各种各样的IF...ELSE...的AI逻辑;你可能说这简直就是简单问题复杂化;对于上边的这个逻辑的确是这样。但是行为树的优势在于其可以用层次化的方式表述AI,甚至可以用很简单的图形化的方式来编辑AI,而不需要改动AI框架代码。实施的时候,可以策划设计好行为树结构,程序填写Condition和Action即可;甚至可以做到代码完全不动,程序预先写好各种不同的Condition和Action供策划选用即可。


原文:

http://www.cnblogs.com/konlil/archive/2011/04/23/2025954.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值