Unity3D Behavior Tree行为树简单介绍及资源分享

昨天看了下《失控玩家》这个电影,发现一直以来也没有认真去研究过游戏AI的设计,于是今天就想边记录边学习的方式去研究游戏AI设计思路。

平台暂时还是基于U3D,官方暂时还没有AI插件,所以这边还是用U3D的第三方插件Behavior Tree。核心包可以点击链接下载U3D行为树1.6.6核心包。

行为树行为树,顾名思义肯定是树状结构,Behavior Tree也离不开这点,参考下图。

 Unity3D Behavior Tree行为树简单介绍及资源分享_第1张图片

 游戏的一个行为树AI最终其实就是图上的树状结构,由一个一个的节点组成。而在Behavior中,整体将这个节点分为了三大类: composite、decorator、leaf,如下图所示。

  • composite:组合节点,下面至少要有一个子节点。
  • decorator:装饰节点,下面有且只有一个子节点。
  • leaf:叶子结点,无子节点。

Unity3D Behavior Tree行为树简单介绍及资源分享_第2张图片

可以理解composite是一个逻辑组合,leaf可能是具体的某个单一逻辑,而decorator则是对leaf的一个额外修饰,例如让其循环执行,又或者将其返回结果取反等等。

在Behavior Tree中,实际上上面三类之下又会分为很多小类,例如composite中,最重要的两个节点便是selector,sequence。

  • selector,从左到右依次执行子节点,当任一子节点返回true后,结束执行。
  • sequence,从左到右依次执行子节点,当任一子节点返回false后,结束执行。

 Unity3D Behavior Tree行为树简单介绍及资源分享_第3张图片

 上面描述或许有些抽象,那基于下面的图可以更具体的描述这两个节点的区别。

 Unity3D Behavior Tree行为树简单介绍及资源分享_第4张图片

 如上图所示,selector的子节点只能成功执行一个,且会基于从左到右的优先级关系依次校验,

  1. eat pizza,吃披萨,当该节点执行成功,意思是吃到了披萨,那后面汉堡、意面就不去吃了。
  2. eat burger,吃汉堡,当披萨没吃到,执行该节点,若吃到了汉堡,那意面就不吃了。
  3. eat pasta,吃意面,当前面披萨、汉堡都没吃到,再来执行该节点,才能吃意面。这也是最后一步,倘若这个节点也返回失败后,则整个selector节点便会返回Failture。

 所以selector其实可以理解是在做选择,会给予设置好的节点顺序,去优先选择靠前的节点执行。

而sequence则是可以理解成是一个流程,按照从左到右的顺序依次执行,这个过程是线性的,任何一个节点中断,都会导致后续的节点无法执行。

Unity3D Behavior Tree行为树简单介绍及资源分享_第5张图片

 如图所示,这是一个吃披萨的过程,下面有四个节点。

  1. gather ingredients,收集食材,倘若收集失败,则后面便无法制作披萨。
  2. make pizza,制作披萨,收集食材成功后,可以开始制作,当制作失败,无法烹饪。
  3. cook pizza,烹饪披萨,制作披萨成功后,可以开始烹饪,当烹饪失败,无法进食。
  4. eat pizza,吃披萨,披萨烹饪完成后,便可以吃了,这也是这个流程最后一步,完成之后整个sequence节点才会返回true。

 那最后用一个图来回顾一下这两个节点用途吧。

Unity3D Behavior Tree行为树简单介绍及资源分享_第6张图片

 这是一个饥饿自动进食AI,可以看出来,因为上面吃多了披萨的原因,所以AI跟我反应他更想吃汉堡。于是我们把eat burger放在eat pizza前面,这样当他通过饥饿判定、拥有食物判定后,他会优先吃汉堡。

 那今天就到这里了,男人至死是少年,勇敢牛牛,不怕困难,加油,打工人!

参考资料:

https://www.bilibili.com/video/BV1pK411j79c?p=10&spm_id_from=pageDriver

https://www.bilibili.com/video/BV1jJ411d7mp?p=1

你可能感兴趣的:(鹿丸的游戏策划旅程,unity,游戏策划,关卡设计)