《行为树的用法|社区征文》

序言

虽然网上已经有大量的关于行为树的教程了但是大多都是介绍行为树的工作原理以及实现方式,当我在使用行为树编写AI的时候还是会有种无从下手的感觉,一颗完整的行为树应该长什么样子?我该如何为我的游戏中的行为树放置节点?

我对行为树的理解也比较有限,但是我觉得我在实际项目中使用行为树所积累下的一些经验还是很有用的,下面我会结合一些案例将我的一些经验浅见分享给各位,让刚接触行为树的小伙伴能够少走一些弯路,耐心看完相信你一定会有所收获。
——————————————————————————————————————————————
示例(去小卖部买零食)

  • 将去小卖部买零食的行为简单拆解一下:
    走到小卖部> 挑选商品>走到柜台>付钱>离开小卖部
    行为1
    如图所示这颗树中我们用到了两种类型的节点,组合节点(顺序节点),叶节点(走到小卖部> 挑选商品>走到柜台>付钱>离开小卖部)
    顺序节点:顾名思义就是让他的子节点按顺序依次执行,当所有的子节点执行成功之后它本身返回成功,其中任意一个子节点执行失败则它本身返回失败。
    叶节点 :它们是行为树最末端的节点,是真正让角色做具体事情的节点。

  • 行为稍稍有点简陋我们来给他加一点细节:
    走到小卖部> 在店里一边逛一边挑选商品>走到柜台>付钱>离开小卖部
    aaaa
    这里又增加了一个组合节点(并行结果),一个装饰节点(重复节点),几个叶节点(等待10秒,走到任意货架,查看商品)
    并行结果:他的所有子节点会同时执行,当其中任意一个子节点返回结果时,它本身返回子节点结果。
    重复节点:顾名思义当子节点返回结果之后又重复执行。

  • 我们再来丰富一下我们的行为树:
    走到小卖部> 在店里一边逛一边挑选商品挑选商品时有一定概率对商品进行吐槽>走到柜台>看看排队结账的人多不多>参与排队(排队时间过长直接离开不买了)>付钱>离开小卖部
    bbb
    我们又增加了一个组合节点(选择节点),一个装饰节点(概率节点),几个叶节点(检查排队,吐槽…)
    选择节点:它的子节点会依次执行,当其中一个子节点返回成功之后将不再继续执行剩余的子节点,它本身返回成功
    概率节点:达成概率时它的自己点才会执行子节点返回结果时它本身才会返回结果,没达成概率它本身则会立即返回成功。

  • 我们来看看效果
    进餐
    成熟的AI需要很多的节点作为支撑今天就先到这里了,
    点赞破10的话我将讲解上述节点具体的实现方式,以及更加复杂的树。
    :grinning: :grinning: :grinning:感谢各位的观看

25赞

好,很优雅请继续

不错点赞了,要是放出行为树的实现那就更好了

:grinning:
优雅永不过时

点赞了,期待更多思路

期待大佬继续更新~

巧了,最近也在弄行为树,期待大佬的实现思路

感谢大家的捧场 :grinning:
行为树节点的实现方式已经有大佬讲解了 《行为树究竟是个啥|社区征文》
不知道各位看官需要的是 如何通过节点的组合实现想要的行为,还是仔细讲解一下各个节点的具体实现呢?

大佬流啤,mark一下

不错,我看了几篇帖子,大概节点都实现了一下,现在就剩下,这棵树的遍历具体实现设计和调用例子了,大佬可以讲讲这方面的内容啊