游戏AI 行为树

目前在游戏中主流的AI框架是 Behavior Tree
先上一张网上找到的行为图


游戏AI 行为树_第1张图片
213345_1292157838h3CY.jpg

从图中可以看到一个怪物的行为被拆分成了,很多的节点,通过节点组合成树形结构。
每个叶子节点是实际正真执行的动作或条件判断,称之为Action 或Condition,从根节点到叶子节点,中间路径上的节点,是组合节点。

叶子节点:会将执行结果返回,返回类型有Success,Failed,Running,三种状态

而组合节点分类三类:
1、Sequence :按照序执行子节点,直到其中一个子节点返回Failed,就停止执行。该节点的返回值也是Failed。如果所有子节点中没有返回Failed的,就会全部执行完,并返回Success给该父节点。该节点,也会返回Success给自己的父亲节点。
2、Selector:按序执行子节点,直到遇到子节点,返回Success,才停止执行后续的子节点。并返回Success给自己父节点,如果所有子节点都返回Failed,那当前节点也返回Failed给自己的父节点。
以上这两类组合节点会通常会比较常用,节点的访问顺序,是深度优先,当遇到符合对一个的条件时,才会终止遍历。
另外还有基于这两类的变种,比如随机Sequence,就是不按照顺序执行子节点,随机挑选。
3、Paraller:并行执行,会有一个主节点,根据主节点范围Runniing状态的情况,其他节点将会按序执行,并将结果返回 running结果,否者就直接返回主节点的执行结果Success or Failed
返回的结果:具体策略
1. Parallel Selector Node: 一False 则返回False,全True才返回True
2. Parallel Sequence Node: 一True则返回True,全False才返回False
3. Parallel Hybird Node:指定数量的Child Node 返回True或False后才决定结果。

整体架构就是将不同的Action或Condition各种组合,拼装成一颗树,并通过对应的访问策略来访问每个分支,并执行叶节点。

在gthub上有一个比较容易理解写C#版本,主要是应用于Unity3d的行为树开源框架
https://github.com/f15gdsy/BT-Framework-2 比较容易理解,可以直接导入unity3d工程使用。
有unity3d上还有一些其他的插件可以使用,比如Behavior Design,Node Canvas 还有腾讯开源的behaviac;
可以找到适合自己项目的框架就足矣。

要使用这种架构设计的AI框架,绝大部分的工作量,还是集中中Action 和 Condition的具体实现上,工作量会比较大,另外就是对于Action 元行为的设计,需要做到足够的抽象,而且Action的行为一定要 低耦合、高内聚。只有这样才能可能有比较高的复用性。

一般游戏中的主要Action和Conditon抽象行为

  1. 元action行为动作
    1. 行走
    2. 跑步
    3. 待机
      1. idle 状态
    4. 冲刺
    5. CastSkill --》需要参数,skillId
      1. 顺序
      2. 随机
        1. 概率分布
    6. 搜敌--》仇恨最高
    7. 走路+射击(并行操作)
    8. 动画播放
  2. 条件判断
    1. 根据血量的判断条件
    2. 根据距离的判断条件
    3. 根据时间的判断条件

你可能感兴趣的:(游戏AI 行为树)