游戏设计模式 之 AI_行为树
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏设计模式 之 AI_行为树相关的知识,希望对你有一定的参考价值。
参考技术A 引擎:CocoCreator2.1.0语言:TypeScript
Git仓库地址: https://github.com/superXfx/GameDesignPatterns.git
定义——
行为被定义为层次化的目标的集合,其表现为树形结构。
智能体首先选择高级抽象目标,然后递归分解成一个可以遵照执行的原子目标的集合。
以此实现原子目标,最终实现高级抽象目标。
类图——
行为树图——
类图看起来比较复杂~,哈哈,其实不难,记住几个关键单就行。
1、树形结构,使用“组件模式”实现。
从“行为树图”中可以看出,复合目标和子目标组成了一个树形结构。
think每次根据权重(由数值策划提供公式)选择一个“分支”,一次执行完整个分支下的所有叶节点,即可完成策略——实际项目中会有很多层,这里简化一下。
2、通过权重选择策略,每个策略都对应一个继承自Goal_Evaluator的类,对应其返回权重的以及设置目标的逻辑。
下面来看看具体实现
简单讲,需要做的事情有3个
1、编写战略目标
重写Enter()函数,负责插入子目标
2、编写子目标
Goal_CheckTriggerState
Goal_FindEmptySlot
Goal_PutTrigger
以上就是策略与子目标的实现,主要工作就是在Enter(),与Process(dt)中,在恰当的时机返回目标状态即可。
3、(用树形结构,即组合模式)组织起来
如图,Goal_Think类通过每个策略的Goal_Evaluator类计算权重,然后addSubgoal,策略在Enter()中也addSubgoal。
这样便组成了一个树形结构,然后通过Process(dt)驱动行为树运行。
扩展:
配置化——我的思路是策划在json表中配置 战略目标以及其对应的子目表“树”。
游戏AI自定义--行为树+xlua+json
ai在游戏开发过程中一直都是被反复修改的一部分。策划短期内的需求随着游戏内容越来越丰富,难免会调整ai行为,所以我长久以来一直想有一个完全交给策划同志们编辑的游戏ai编辑器。
我们考虑一下游戏实际逻辑ai,比如有这样一些需求:角色需要找寻一个自己能打得过的野怪并且避让某些打不过的大型野怪,或角色达到一定等级做一些特定行为等。这些行为加条件的组合肯定是依赖于角色本身已经实现了一些基本的功能,例如行走到指定位置,播放指定动作等,这些逻辑需要提前都实现好,这里不做说明。然后留给ai中的逻辑去调用合适的用户api。
还有就是用状态机还是行为树去实现?我感觉行为树更好一些。状态机在完成需求固定且状态比较少的时候可以用一下,一旦出现状态添加或删除就需要大动干戈了,而行为树的扩展性就很出色了。行为树大家能找到很多资料,大致上的内容就不说了。主要说一下这里的一些区别吧。
我这里把节点分成这4类
·叶节点:可执行状态的节点,也就是主要的行为逻辑都需要在这个节点下实现。
另外3类节点是控制型节点
·顺序节点:顺序执行其子节点
·选择节点:通过计算子节点的权重随机选择一个节点
·并发节点:执行所有自己点
这4类节点本身都有进入条件的检测。
为了更好的配合策划开发,我用xlua来调用游戏中的用户api。这是叶节点的xlua文件,控制节点的xlua文件也类似只是没有 update()和trigger()。脚本是外部调用的,首先会执行detect()判断这个节点的进入条件,当返回true的时候才会调用enter()。
·function detect()--节点的进入条件
·function enter()--进入后调用
·function update()--节点进行中(只有叶节点才有)
·function trigger()--外部事件触发后响应 (只有叶节点才有)
·function exit()--退出节点
function detect() return true end function enter() end function update(dt) end function trigger(type,obj) end function exit() end
假如现在有这个需求:
有一个人去上班直至工作到下班,下班的时候会有两种选择,直接回家或者去女友家,去女友家的话如果没有礼物需要再去礼品店购买一些礼品,有了礼品后去女友家和女友约会,直到这一天就结束了。一直循环这种生活。
先来看看这颗行为树:
有了这颗树的罗列我们可以在编辑器下构造如下结构:
这颗树结构最后导出json格式用于构造节点
这颗树的执行效果是这样的:
下面是源码下载:资源下载(百度云)
以上是关于游戏设计模式 之 AI_行为树的主要内容,如果未能解决你的问题,请参考以下文章