游戏设计模式 之 AI_行为树

AI.gif

引擎:CocoCreator2.1.0
语言:TypeScript
Git仓库地址:https://github.com/superXfx/GameDesignPatterns.git

定义——
行为被定义为层次化的目标的集合,其表现为树形结构。
智能体首先选择高级抽象目标,然后递归分解成一个可以遵照执行的原子目标的集合。
以此实现原子目标,最终实现高级抽象目标。

类图——


BehaviorTree.jpg

行为树图——


image.png

类图看起来比较复杂~,哈哈,其实不难,记住几个关键单就行。
1、树形结构,使用“组件模式”实现。
从“行为树图”中可以看出,复合目标和子目标组成了一个树形结构。
think每次根据权重(由数值策划提供公式)选择一个“分支”,一次执行完整个分支下的所有叶节点,即可完成策略——实际项目中会有很多层,这里简化一下。
2、通过权重选择策略,每个策略都对应一个继承自Goal_Evaluator的类,对应其返回权重的以及设置目标的逻辑。

下面来看看具体实现
简单讲,需要做的事情有3个
1、编写战略目标


image.png

重写Enter()函数,负责插入子目标

2、编写子目标
Goal_CheckTriggerState


image.png

Goal_FindEmptySlot


image.png

Goal_PutTrigger


image.png
image.png

以上就是策略与子目标的实现,主要工作就是在Enter(),与Process(dt)中,在恰当的时机返回目标状态即可。

3、(用树形结构,即组合模式)组织起来


image.png
image.png
image.png
image.png

如图,Goal_Think类通过每个策略的Goal_Evaluator类计算权重,然后addSubgoal,策略在Enter()中也addSubgoal。
这样便组成了一个树形结构,然后通过Process(dt)驱动行为树运行。

扩展:
配置化——我的思路是策划在json表中配置 战略目标以及其对应的子目表“树”。

你可能感兴趣的:(游戏设计模式 之 AI_行为树)