Unity3d Ai Behavior Tree

by luzexi
+

专为Unity3D打造的AI行为树

( Updated 38 minutes ago )

Unity3DAIBehaviorTree

This is AI BehaviorTree for Unity3d

专为Unity3D打造的AI行为树,包括ai编辑器
相关的博客文章地址为: http://www.luzexi.com/unity3d%E8%A1%8C%E4%B8%BA%E6%A0%91%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A8%8B%E5%AE%9E%E7%8E%B0/


github

行为树(Behavior Tree)具有如下的特性:

它只有4大类型的Node:

  • Composite Node
  • Decorator Node
  • Condition Node
  • Action Node

    任何Node被执行后,必须向其Parent Node报告执行结果:成功 / 失败。
    这简单的成功 / 失败汇报原则被很巧妙地用于控制整棵树的决策方向。

    ———————————————————————

    先看Composite Node,其实它按复合性质还可以细分为3种:
  • Selector Node
    当执行本类型Node时,它将从begin到end迭代执行自己的Child Node:
    如遇到一个Child Node执行后返回True,那停止迭代,
    本Node向自己的Parent Node也返回True;否则所有Child Node都返回False,
    那本Node向自己的Parent Node返回False。

  • Sequence Node
    当执行本类型Node时,它将从begin到end迭代执行自己的Child Node:
    如遇到一个Child Node执行后返回False,那停止迭代,
    本Node向自己的Parent Node也返回False;否则所有Child Node都返回True,
    那本Node向自己的Parent Node返回True。

  • Parallel Node
    并发执行它的所有Child Node。
    而向Parent Node返回的值和Parallel Node所采取的具体策略相关:
    Parallel Selector Node: 一False则返回False,全True才返回True。
    Parallel Sequence Node: 一True则返回True,全False才返回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:按既定先后顺序迭代。

    Selector和Sequence可以进一步提供非线性迭代的加权随机变种。
    Weight Random Selector提供每次执行不同的First True Child Node的可能。
    Weight Random Sequence则提供每次不同的迭代顺序。
    AI术语中称为partial-order,能使AI避免总出现可预期的结果。

    ———————————————————————

    再看Decorator Node,它的功能正如它的字面意思:它将它的Child Node执行
    后返回的结果值做额外处理后,再返回给它的Parent Node。很有些AOP的味道。

    比如Decorator Not/Decorator FailUtil/Decorator Counter/Decorator Time…
    更geek的有Decorator Log/Decorator Ani/Decorator Nothing…

    ———————————————————————

    然后是很直白的Condition Node,它仅当满足Condition时返回True。

    ———————————————————————

    最后看Action Node,它完成具体的一次(或一个step)的行为,视需求返回值。
    而当行为需要分step/Node间进行时,可引入Blackboard进行简单数据交互。

    ———————————————————————

    整棵行为树中,只有Condition Node和Action Node才能成为Leaf Node,而也
    只有Leaf Node才是需要特别定制的Node;Composite Node和Decorator Node均
    用于控制行为树中的决策走向。(所以有些资料中也统称Condition Node和Action
    Node为Behavior Node,而Composite Node和Decorator Node为Decider Node。)

    更强大的是可以加入Stimulus和Impulse,通过Precondition来判断masks开关。

    通过上述的各种Nodes几乎可以实现所有的决策控制:if, while, and, or,
    not, counter, time, random, weight random, util…

    ———————————————————————

更多Unity3D内容请访问: http://www.luzexi.com