Unity火爆插件Behavior Designer行为树插件学习
如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现,
但是再复杂的一般用经典的状态机来切换状态,但是写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。
行为树,其实也是一种有限状态机,只不过形式上分层呈树结构,人称分层有限状态机(HFSM)。
行为树主要用四种节点来描述行为逻辑
--顺序节点(Sequence):组合节点,顺序执行子节点,只要碰到一个子节点返回FALSE,则返回FALSE;否则返回TRUE。
--选择节点(Selector):组合节点,顺序执行子节点,只要碰到一个子节点返回TRUE,则返回TRUE;否则返回FALSE。
--条件节点(Condition):叶节点,执行条件判断,返回判断结果。
--执行节点(Action):叶节点,执行设定的动作,一般返回TRUE。
比如:我们要表达一个最简单的NPC AI :
如果碰到主角,打招呼;否则,睡觉。
行为树的结构如下(其中黄色的是装饰节点,这里当做CD定时器来处理,在CD时间内这个节点一直返回FALSE,否则返回TRUE):
设计好这个图,实现时将其转化为xml或者lua table或者json或者其他层次化的表示供程序读入,并构建好树对象,整个执行流程伪代码可能是这样的:
function gameBrain.init()
bt = btreee:new()
bt.load("test.xml")
end function gameBrain.update()
bt.execute()
end function main_cycle()
--...
brain.update()
--...
end
有了这样一颗行为树,如果我们改变Condition的条件及两个不同的Action的具体操作,就可以实现各种各样的IF...ELSE...的AI逻辑;你可能说这简直就是简单问题复杂化;对于上边的这个逻辑的确是这样。但是行为树的优势在于其可以用层次化的方式表述AI,甚至可以用很简单的图形化的方式来编辑AI,而不需要改动AI框架代码。实施的时候,可以策划设计好行为树结构,程序填写Condition和Action即可;甚至可以做到代码完全不动,程序预先写好各种不同的Condition和Action供策划选用即可。
-------------------------------
在Unity中我们如何实现和应用行为树呢?
以下为大家介绍[可视化插件] Behavior Designer 1.6.1 - 行为模式设计专用插件
Behavior Designer提供了一个功能强大的API,使您可以轻松创建新任务。它还提供了一个直观的可视化编辑器,包含数百个任务和PlayMaker / uScript集成,可以创建复杂的AI而无需编写任何代码!
行为设计师从一开始就设计得尽可能高效。因此,它在包括移动设备在内的所有平台上运行良好。它适用于Unity。
特征:
- 直观的可视化编辑器
- 功能强大的API
- 可视运行时调试器
- 在任务之间进行通信的变量
- 有条件的中止
- 将现有代码与反射任务一起使用
- 数以百计的任务
- 没有额外的资产文件或编译步骤
- 二进制或JSON序列化
- 包括运行时源代码
- 丰富的文档和教程视频
- 在线提供示例项目
- 和更多
点击下载 提取码:2ave
需要继续进行行为树插件Behavior Designer的学习,可观看下面的视频教程讲解
目录
共24讲,格式MP4,大小3GB,带素材
扫码时备注或说明中留下邮箱
付款后如未回复请至https://shop135452397.taobao.com/
联系店主
Unity火爆插件Behavior Designer行为树插件学习的更多相关文章
- 【转】利用Behavior Designer制作敌人AI
http://www.unity.5helpyou.com/3112.html 本篇unity3d教程,我们来学习下利用Behavior Designer行为树插件来制作敌人AI,下面开始! Beha ...
- 【linux】驱动-9-设备树插件
目录 前言 9. Linux设备树插件 9.1 格式 9.2 设备树插件的编译和加载 9.2.1 单独使用dtc工具编译 9.2.2 内核dtc工具编译设备树插件 9.2.3 加载设备树插件 9.2. ...
- 基于行为树的AI 与 Behavior Designer插件
优点: 0.行为逻辑和状态数据分离,任何节点都可以反复利用. 1.高度模块化状态,去掉状态中的跳转逻辑,使得状态变成一个"行为". 2."行为" ...
- js组件在线编辑器插件、图表库插件、文件树插件
在线编辑器插件: 一.kindeditor 二.UEditor 图表库插件: 一.echart 二.highchart 文件树插件: 一.zTree -- jQuery 树插件 http://www. ...
- Unity3D行为树插件Behave学习笔记
Behave1.4行为树插件 下载地址:http://pan.baidu.com/s/1i4uuX0L 安装插件和使用 我们先来看看插件的安装和基本使用方法,新建一个Unity3D项目,这里我使用的是 ...
- 顶级jQuery树插件
顶级jQuery树插件 顶级jQuery树插件 2013-03-05 17:20 139人阅读 评论(0) 收藏 举报 jsTree JsTree是一个基于jQuery的Tree控件.支持HTML.J ...
- easyui&8Jquery ztree树插件
7Jquery easyui前台UI框架 开发包: 7.1Layout页面布局 将课后资料中后台系统前台页面素材导入项目中 1.导入Jquery,easyui相关js,css文件 <link r ...
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理
在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...
- 基于bootstrap的jQuery多级列表树插件 treeview
http://www.cnblogs.com/mfc-itblog/p/5233453.html http://www.htmleaf.com/jQuery/Menu-Navigation/20150 ...
随机推荐
- Android笔记(四十三) Android中的数据存储——SQLite(五)delete
SQLite通过delete()方法删除数据 delete()方法参数说明: delete()方法参数 对应sql部分 描述 table delte from table_name 要删除的表 whe ...
- 全局唯一ID生成器(Snowflake ID组成) 分析
Snowflake ID组成 Snowflake ID有64bits长,由以下三部分组成: time—42bits,精确到ms,那就意味着其可以表示长达(2^42-1)/(1000360024*365 ...
- java ArrayList的remove()方法的参数为int和Integer的问题
ArrayList的父类List中,有2个remove重载方法: remove(int index) remove(Object o) 假如参数输入为数字类型,到底是删除值等于该数字的对象还是删除索引 ...
- Linux命令——rsync
参考:Rsync (Remote Sync): 10 Practical Examples of Rsync Command in Linux How to Sync Files/Directorie ...
- windows系统开机执行文件
以下都是在windows系统下执行的 开机自启程序 新建xxx.bat的文件 编辑自己的bat文件,将所要加载的项目引导进来 注意: 如果有相对路径的话,就需要先加载项目,在用python 执行脚本程 ...
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
uber全球用户每天会产生500万条行程,保证数据的准确性至关重要.如果所有的数据都得到有效利用,t通过元数据和聚合的数据可以快速检测平台上的滥用行为,如垃圾邮件.虚假账户和付款欺诈等.放大正确的数据 ...
- jemeter 查看结果树 分析
查看结果树,可以看到测试通过,通过 的测试通常为绿色.红色则代表失败了.可以查看到取样器结果,请求,响应数据 取样器结果中可以查看到响应头,响应数据大小,响应时间等信息. Thread Name: 线 ...
- 2.spring的主要模块作用
spring中大约包含20过个模块, 主要包括以下几部分: 1. Core Container Core Container(核心容器)包含Core,Beans,Context和Expression ...
- 关于docker的UnionFS系统原理
docker镜像的结构就像花卷一样,是一层一层的,比如tomcat镜像,它有450M左右,但我们实际的tomcat却很小,为什么tomcat镜像那么大呢,是因为,tomcat镜像的最里面是kernel ...
- netty: marshalling传递对象,传输附件GzipUtils
netty: marshalling传递对象,传输附件GzipUtils 前端与服务端传输文件时,需要双方需要进行解压缩,也就是Java序列化.可以使用java进行对象序列化,netty去传输,但ja ...