PS:该篇文章主要记录了behaviac和behavior的区别,如果没有兴趣可跳过。
想了解behaviac可转至:【Behaviac与Unity整合使用】
想了解behavior designer可转至:

行为树技术已经在游戏开发过程中逐渐变得流行起来。目前业界有两款知名
度相对比较高的行为树组件——Behavior Designer(后面简称 BD)和 behaviac。本文将重点剖析这两款行为树组件的特点和差异。

BD 是独立游戏工作室 Opsive 开发的一款集成在 Unity 引擎中的行为树插件(www.opsive.com),提供了让程序员、策划、美术等方便使用的可视化编辑器,以及丰富的 API 以便轻松的创建任务,并无缝集成类似 uScript 和 PlayMaker 等第三方的 Unity 插件。
behaviac 是腾讯公司提供的一款行为树解决方案(www.behaviac.com),是游戏 AI 的开发框架和组件。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发,提供了功能强大的编辑器和 API。

费用
BD 是 Unity Asset Store 中的付费组件,可以拿到运行时的源码,如下图所示:

behaviac 完全免费使用, 已经在 Github 上全部开源,包括运行时和编辑器。

平台
BD 是 Unity 引擎的插件,运行时只有 C#语言实现,编辑器也整合在 Unity 的编辑器中。
behaviac 的运行时支持全平台(Windows/Android/iOS/Linux 等),有 C++和 C#两种版本,并原生支持 Unity 引擎,也可以整合 Cocos 引擎。编辑器运行在 Windows 上,是独立运行的exe,可以通过 IP 和端口跟游戏端(运行时)进行本机或远程连调。

支持
BD 可以在其官网提供的论坛进行发帖咨询并得到答疑,提供了较为全面的文档、视频和示例,但目前只有全英文版。
behaviac 在官网和 Github 上提供了问题咨询和答疑,目前都为全中文版。此外,还提供了开发者 QQ 群(433547396),可以与组件研发人员进行实时沟通,以最快的速度交流使用中的问题,并及时修复使用者发现的 bug。behaviac 自带了相关游戏 demo 和单元测试的代码,提供的中文文档已经较为全面,但缺乏教学视频。

技术点
相比其他行为树组件,BD 提供了很多实用的技术:还是比较丰富的,同时还可以自己拓展节点

节点类型
BD 提供了四种概念节点,都称之为任务(Task):
组合节点(Composite):Sequence、Selector、Parallel 等。
装饰节点(Decorator):为仅有的一个子节点额外添加一些功能,比如让子节点一直运行直到其返回某个运行状态值,或者将子节点的返回值取反等。
动作节点(Action):动作节点是真正做事的节点,其为叶节点。BD 中自带了很多动作节点,如果不够用,也可以编写自己的动作节点。
条件节点(Conditional):用于判断某条件是否成立。

BD 常用的任务包括动作和条件节点,这两个节点是用来派生出自己游戏所需的子类来进行脚本定制,特定的逻辑体现在派生出的动作或条件节点中,暴露一些属性在编辑器中以供配置和测试。
BD 提供了覆盖整个 Unity 引擎 API 的各种任务,包括动画、声音、物理、角色控制、粒子系统等方面的常用类型(如下图所示),这样就允许非程序员(策划或美术)方便的创建自己的游戏 AI,同时也让程序员尽量少的编写自定义的任务。

behaviac 提供了丰富的节点类型,一般情况下,开发者无需扩展自己的节点就可以工作,并不需要派生自己的动作和条件节点。除了支持常用的节点外,behaviac 还提供了很多快捷节点(例如,选择监控、条件执行、概率选择、随机选择等),每个节点上还可以支持添加附件(前置、后置和事件等)。

此外,behaviac 还提供了有限状态机(FSM),并支持 FSM 跟行为树的嵌套使用。behaviac 是基于元信息的工作方式,只需要实现 Agent 子类及其属性、方法,然后在编辑器中创建行为树时选用这些属性或方法。

条件终止
BD 为了实现终止执行,引入了条件终止(Conditional Abort)的概念,也就是设置了终止的节点将在每次更新时都会进行条件测试,以免从头开始执行整个行为树。这类似于虚幻引擎 4(UE4)中的观察者终止(Observer Abort)。
如下图所示,Sequence 节点设置了“Abort”标记,那么当第一个叶子节点“Int Comparison”返回为 true 时,可以执行到后面的 Wait 节点。这里 Wait 节点会等待 10 秒中,在这 10 秒内如果之前的“Int Comparison”节点返回为 false 时,那么 Sequence 节点会被重新开始执行。

behaviac 的实现方式跟 BD 有所区别,可以通过“前置”附件来实现该功能。该前置附件的“执行时机”只要设置为“Enter/Update”,就可以支持当前节点在每次进入或执行时都会检测该前置条件,来决定它的子节点是否会被执行。
behaviac 的前置附件机制可能更为灵活和通用,接下来介绍的节点类型也能通过前置来实现。

中断节点
BD 提供了中断(Interrupt)和执行中断(Perform Interruption)节点。
如果中断节点被触发,则它的所有子节点的执行被中断。中断命令被执行中断节点发起。中断节点在收到中断命令前,不会打断子节点的执行状态。如果子节点执行完毕还没有收到任何中断命令,则直接返回子节点的执行结果,如下图所示:

behaviac 没有提供中断相关的节点,可以通过“前置”附件来实现该功能。该前置附件的“执行时机”只要设置为“Enter/Update”,就可以支持当前节点在每次进入或执行时都会检测该前置条件,来决定它的子节点是否会被执行。

监控节点
BD 提供了监控任务(Guard Task)来保证多个节点执行的互斥性,类似于多线程编程中的信号量(Semaphore)。
比如有两个不同的任务,一个播放声音,另一个播放特效。这两个任务在行为树里是两个不同的分支,所以它们之间并不知道对方的状态,有可能同一时间这两个任务被同时执行。
但可能并不希望这种情况发生。在这种情况下,通过使用监控任务来保证当前要么播放音效,要么播放特效。只有当第一个播放完毕,才会播放第二个。
behaviac 没有提供监控节点,可以通过“前置”附件来实现该功能。该前置附件的“执行时机”只要设置为“Enter/Update”,就可以支持当前节点在每次进入或执行时都会检测该前置条件,来决定它的子节点是否会被执行。

事件系统
BD 提供了一个内置的事件系统,可以通过代码(BehaviorTree.SendEvent 函数)触发事件,也可以通过行为树的节点来触发(SendEvent 节点)和监听(HasReceivedEvent 节点)事件。
behaviac 的事件跟 BD 有所区别,通过附件的方式,将另一棵行为树作为附件添加到当前行为树的某个节点上,在游戏端(运行时)发送事件时进行响应,并切换到另一棵行为树。
behaviac 未提供 BD 中的 SendEvent 和 HasRecivedEvent 节点,只能在代码端发送事件,行为树里监听和响应事件。

性能
BD 和 behaviac 都存在着部分代码使用了 C#的反射来进行方法的调用,会影响性能。
在 BD 中,行为树在启动的时候会获取每个任务的事件接口。事件定义在了Behavior.EventTypes 里,包括 OnCollisionEnter 和 Update 等物理和更新事件。获取事件的时候由于用到了 C#的反射,所以当任务节点很多的时候,这个过程会非常的慢。
在 behaviac 中,解决方案是通过生成 C#源码的方式来绕开反射的使用,目前 XML 版行为树的执行还依赖于反射,需要改进。

热更新
BD 的行为树的扩展节点全部基于 C#写脚本实现,不便于在 iOS 平台进行热更新。
behaviac 采用 XML 版的行为树,这些 XML 文件可以作为配置文件在 iOS 平台上进行热更新。

调试
BD 的编辑器嵌套在 Unity 编辑器中,调试可以无需跟游戏建立连接,就可以直接设置断点、查看执行路径、修改变量进行调试。
而 behaviac 的编辑器是独立的 exe。当进行调试时,需要将游戏端(运行时)跟编辑器建立连接,然后游戏端将数据发到编辑器,编辑器进行相应的显示,编辑器这边也可以修改参数并发送给游戏端进行测试。
behaviac 独立的编辑器可以方便的与布局在 Linux 服务器上的游戏端进行远程连调,这也是 BD 所不支持的优势。

编辑与查看
在编辑行为树的过程中,通过实时的错误检测器,BD 会立即显示行为树中的节点错误,这样方便开发者快速找出错误而不用等到运行时。类似的,如果修改了行为树,BD 会在游戏场景中立即使用修改后的行为树。
behaviac 对行为树错误的检测是通过在编辑器中手动的点击“检查错误”按钮或开始导出行为树时,才开始检查行为树中的错误。此外,如果修改了行为树,也需要手动导出该行为树后,通过热加载,游戏端才会自动体现修改后的效果。
因此,behaviac 在实时编辑和检查错误方面,可以稍微改进跟 BD 保持一致流畅的用户体验。

Behaviac 和 Behavior Designer两者的区别相关推荐

  1. Behavior Designer笔记

    1.总览 Behavior Designer是一个行为树程序.他为所有人设计-程序美工策划.Behavior Designer提供很好很强大的API,允许你愉快的进行玩耍.他和PlayMaker和uS ...

  2. Unity3D Behavior Designer 行为树1 认识

    环境:Unity2017.4 语言:C# 总起: 行为树,我很早就了解到了这个插件,不过对于它究竟是什么其实概念上比较模糊,这次正好趁机我们一起来学习一下(跟渲染一样AI也是个大坑). 本次教程基于插 ...

  3. Behavior Designer 干货总结

    Unity3D上,实现简单AI最好的工具,莫过于BehaviorDesigner了. 虽然我自己也写过行为树,虽然也用过别的小伙伴写的行为树,虽然也用过企鹅社公开的行为树,虽然一大堆,但是的确没有哪个 ...

  4. 使用Behavior Designer插件简单制作NPC AI

    简单用Behavior Designer插件实现:当敌人发现玩家后开始追踪玩家,当追上玩家时发动攻击 Behavior Designer自带了一些Task,但是要实现自己的需求,必须动手写自己的Tas ...

  5. Unity Behavior Designer插件 任务模块

    写在前面 由于项目需要用行为树插件,在学习过程中发现网上关于行为树的资料实在太少,大部分都是蜻蜓点水般略过,就连官方的脚本文档和教学视频也是一般般,导致我在使用时不断采坑,故开一篇博客来完善大部分行为 ...

  6. Behavior Designer

    https://my.oschina.net/acitiviti/blog/621627

  7. Behavior Designer知识点

    1.AbortType: None:不被其它节点打断,非None时,每一个Tick都在判断其直接子节点中的条件节点的运行结果. Self:仅终结子节点中的操作,重新开始自己的第一个子节点 Lower ...

  8. Behavior designer 英文解释

    https://www.youtube.com/watch?v=YCMvUCxzWz8#t=1402.952655

  9. Behavior Designer插件解析

    选择节点和条件节点和并行节点这种非叶子节点都有一个中止类型 当某个分支下某一个节点处于running时,会向父节点返回running状态,并将父节点设为running状态,然后一直往上传递记录,传递完 ...

最新文章

  1. 【OpenCV 4开发详解】Sobel算子
  2. c++Interpolation search插值搜索的实现算法之二(附完整源码)
  3. ABAP 引用类型介绍
  4. python_getopt解析命令行输入参数的使用
  5. Struts文件上传与下载详解_文件的下载
  6. android.support.v7 fragme,打造最强RecyclerView侧滑菜单,长按拖拽Item,滑动删除Item
  7. BasKet Note Pads-利用软件作条记
  8. IT程序人生:学会写程序能从事哪些技术岗位?
  9. 在DC中误删除ISA计算机后无法连接ISA配置服务器问题
  10. MySQL教程(十二)—— 数据的导入与导出
  11. python多重继承_Python多重继承
  12. bugku 杂项 流量分析(cnss)
  13. MongoDB操作文件
  14. WPS Office V15.3.2绿化版免费下载
  15. python 代码生成器_Python代码生成器(代码生成工具)V1.1 正式版
  16. 宝塔php7.1安装ioncube,如何使用宝塔安装ionCube扩展
  17. 阿里云服务器ECS建站教程
  18. 搞懂特征值与特征向量
  19. 七剑下天山-告别时域分析的过渡课堂练习-SS2022s
  20. R语言用igraph绘制网络图可视化

热门文章

  1. 微信分享卡片制作_微信分享卡片自定义制作
  2. RDM连接Redis配置
  3. [Python]远程SSH库Paramiko简介
  4. 六种方法教你轻松解决MacBook无法充电难题
  5. TK mapper与 PageHelper
  6. TK mybatis插件通用mapper与oracle的几个坑
  7. SQL截取字符串中的某个特定位置部分
  8. Avada学习之-如何修改Header-logo和favicon图标
  9. 疑论:对阿里巴巴的投资该歇手了
  10. pycharm环境下配置scrap爬虫环境