1.行为树的启蒙

在工作中,关于写横版战斗的AI当看到需求确实有点头大,在我接手的时候已经用的是成型的 有限状态机,有限状态机 在状态条件大到一定程度的时候就跟蜘蛛网一样,很难去修改去维护。还好已经将AI制作图形化。

前几天跟其他同事聊到行为树,对成型项目的分析,行为树,比有限状态机更模块化,利于优化(仁者见仁,智者见智,不喜勿喷),今天不早了 先写些行为树的基本设计思路,简单的游戏AI 无非if else  And doAction,首先介绍行为树的几种节点

初识行为树节点

1.IBhaviorTreeNode 行为树基类接口

2.BehaviorTreeRoot 行为树的Root节点  树状接口,就必须会有一个根节点 行为树也一样 

3.CompositeNode : IBehaviorTreeNode   复合节点 ,不能为叶子节点复合节点的实现 是由一个容器 例如 List<IBehaviorTreeNode> 来实现 并且实现对容器的删减 是一个抽象类

4.SelectorNode : CompositeNode 选择节点  继承于 复合节点,可以存储很多其他节点,当执行时,遇到一个child执行后返回true,直接停止迭代,本节点向自己父节点直接返回true,如果所有child返回false,本node向自己父节点返回false。所以子节点的添加顺序 或执行顺序非常重要。

5.SequenceNode : CompositeNode 组合节点 继承于 复合节点 ,与SelectorNode不同的是,遇到一个子节点执行后返回false,就停止迭代,本节点向父节点返回false,如果所有child返回true,本node向自己父节点返回true.

6.ConditionNode : IBehaviorTreeNode  条件判断节点 根据执行的判断 返回Ture or False

7.DecoratorNode : IBehaviorTreeNode 装饰节点 一般装饰节点都有一个 ConditionNode的子节点 顾名思义是将子节点的结果经过修饰处理 例如反转后 反馈给父节点

8.ActionNode : IBehaviorTreeNode 行为节点  用于实现动作,攻击、施法、等 

9.ParallelNode : CompositeNode 平行节点 平行执行它的所有Child Node。而向Parent Node返回的值和Parallel Node所采取的具体策略相关:

    Parallel Selector Node: 一False则返回False,全True才返回True。
    Parallel Sequence Node: 一True则返回True,全False才返回False。
    Parallel Fall On All Node: 所有False才返回False,否则返回True。
    Parallel Succeed On All Node: 所有True才返回True,否则返回False。
    Parallel Hybird Node: 指定数量的Child Node返回True或False后才决定结果。

    Parallel Node提供了平行的概念。
    不需要像Selector/Sequence那样预判哪个Child Node应摆前,哪个应摆后,
    常见情况是:
    (1)用于平行挂接多棵Action子树。
    (2)在Parallel Node下挂一棵子树,并挂上多个Condition Node,以提供实时性和性能。
    Parallel Node增加方便性的同时,也增加实现和维护复杂度

 PS:上面的Selector/Sequence准确来说是Liner Selector/Liner Sequence。 AI术语中称为strictly-order:按既定先后顺序迭代。在添加子节点的时候必须要确定谁在前谁在后,因为会影响到执行。


由以上节点 就可以拼接出一套AI ,明天再谈行为树的实现



发布了9 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_20770509/article/details/49647445
1.