优点:
   0.行为逻辑和状态数据分离,任何节点都可以反复利用。
   1.高度模块化状态,去掉状态中的跳转逻辑,使得状态变成一个“行为”。
   2."行为"和"行为"之间的跳转是通过父节点(Composite)的类型来决定的(例如sequence或者selector) 。比如并行处理两个行为,在状态机里面无法同时处理两个状态。
   3.通过增加控制节点的类型,可以达到复用行为的目的。

Behavior trees are a combination of many different AI techniques: hierarchical state machines, scheduling, planning, and action execution. 
行为树结合了多种ai计数:分层状态机,调度,规划和执行

There are four different types of tasks: action, conditional, composite, and decorator
四种节点: 行为, 条件, 复合, 装饰


简单的行为树例子,条件和动作在同一层的前面,而不是像状态机一样的在前面
Behavior Designer will execute the tasks in a depth first order
深度优先,子节点从左到右执行

常用的控制节点有以下三种
选择(Selector):    选择其子节点的某一个执行(顺序,无序,权重)
序列(Sequence):将其所有子节点依次执行,也就是说当前一个返回“完成”状态后,再运行先一个子节点
并行(Parallel):     将其所有子节点都运行一遍
可以扩展出很多其他的控制节点,比如循环(Loop)等

装饰节点是一个父节点,并且只能有一个子节点

节点状态: running, success, or failure 

BehaviorManager 管理行为树的运行
update interval: every frame; Special seconds, manual 手动调用  BehaviorManager.instance.Tick(); 或 BehaviorManager.instance.Tick(BehaviorTree);
Task Execution Type:  Task Execution Type allows you to specify if the behavior tree should continue executing tasks until it hits an already executed task during that tick or if it should continue to execute the tasks until a maximum number of tasks have been executed during that tick.  No Duplicates 每个task一帧只会执行一次
   
 Behavior Designer 基本概念

     

    Composites
        这里的"组合" 全名应该被成为“组合节点控制(管理)类目”,顾名思义在此条目下若干个选项都被称之为“控制类节点”,用以从最高的纬度去规范行为树的流程。具体细分为如下几种
        

    Parallel 并行节点    此节点下属所有节点将一起进行,其中某一个执行返回false 则Parallel节点返回false

    Parallel Selector 并行选择节点    此节点下属所有节点只要有一个返回success,则Parallel Selector节点返回success     

        注意: 以上二节点都是并行的,也就是说同时执行所有下属节点

           

    Priority Selector 优选选择节点    此节点下属所有节点依次执行直到返回success

     

    Random Selector 随机选择节点    此节点下属所有节点随机执行直到其中某一个返回success

     

    Ramdom Sequence 随机选择列队节点    此节点下属所有节点随机执行直到其中一个返回false

     

    Selector 选择节点 此节点下属所有节点依次执行直到返回true

     

    Selector Evaluator 计算选择节点(姑且这样叫把,这个名词翻译的优点拗口)    此节点下属所有节点依次执行直到返回success,有一种情况使其返回running状态并中断,就是有节点被打勾了

     

   Sequence 顺序节点  此节点下属所有节点依次执行直到返回false

    

    Decorators
        装饰节点应为Composites的分支节点,而装饰节点一般用来修饰判断,比如这个修饰可以是 “直到...成功”,“直到...失败”

       

        Conditional Evaluator   条件计算节点  此节点下属节点执行直到返回success,有一种情况使其返回running状态并中断,就是有节点被打勾了
        

        Interrupt 中断(开关)节点 此节点第一次执行为true第二次为false 

        

        Inverter 逆变节点 此节点的子节点如返回success他可将结果改为false反之也可

          

        Repeater 重复节点    此节点可设置该节点下子节点重复执行的次数

          

        Return Failure / Return Success  我就不解释了

        Task Guard Task意为任务Guard意为守卫,那么这个节点是告诉我们可以用他来限定该节点的子节点不能同时被两项或以上的任务访问,换而言之该节点可以设置它的子节点能同时被几个任务(其余的节点)访问,类似于多线程访问统一资源我们所使用的Lock。

        Until Fuilure /  Until Success 直到...返回false/知道...返回Success 这两项我想也没有必要说明了,但看字面上的意思足够说明一切了。

    Actions
        动作或行为,如“攻击” “追逐”
             

        Action有三大类,第一类为基础的API,第二类为基本的Monobehavior操作 如Animator,Animation,Behavior 等等,第三类为辅助API 都是使用反射处理,当然这个大类隐含着性能的损耗要谨慎使用

        此处仅选必要的API解释,其余的相信你可以看懂

        Behavior Tree Reference 此节点允许此节点的脚本中重写GetExternalBehaviors方法,也就是你可以在运行时指定一个行为树在当前节点下运行!(动态指定行为树)
        Preform Interuption 此节点允许用户中断在节点列表中添加的任务(可以有很多任务)
        Restart Behavior Tree 重启行为树
        Stop Behavior Tree 终止行为树
        另外 Action 一般我们程序需要扩展给策划配置 后文将提到如何自行扩展Action。

   Conditionals
        用于条件对比,例如 “是否为空” “是否是处于某状态”  “是否接收到消息” “是否等于某数值”

       

        作为行为树组建中最容易理解的Conditionals,在其基本API中大多以 "Is has XXX" 开头,顾名思义即可

    如何扩展(程序)
        创建一个自定义行为(Action)或是节点
       

        相关文档
        http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=5

        使用运行时(Runtime)设置的数值

        在编辑器中设置的数值有两种一种是在使用功能性节点的时候节点中需要预设的数值,另一种是全局可访问到的数值

        

添加wait节点的暂停时间

          

添加全局可访问的数值

          

非运行时可以使用刚才设置的float数值

          

当然也可使用全局数值

        说完了使用编辑器访问数值现在该使用运行时动态获取这些数值了,代码很简单

        

        相关文档  
        http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=54
 



基于行为树的AI 与 Behavior Designer插件的更多相关文章

  1. 【转】利用Behavior Designer制作敌人AI

    http://www.unity.5helpyou.com/3112.html 本篇unity3d教程,我们来学习下利用Behavior Designer行为树插件来制作敌人AI,下面开始! Beha ...

  2. 做游戏长知识------基于行为树与状态机的游戏AI(一)

    孙广东 2014.6.30 AI. 我们的第一印象可能是机器人,如今主要说在游戏中的应用. 现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完毕的.比方在RPG游戏中 ...

  3. Unity教程之-基于行为树与状态机的游戏AI

    AI.我们的第一印象可能是机器人,现在主要说在游戏中的应用.关于AI的相关文章我们在前面也提到过,详细请戳这现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完成的.比 ...

  4. Unity火爆插件Behavior Designer行为树插件学习

    如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现, 但是再复杂的一般用经典的状态机来切换状态,但是写起来比较麻烦.相对的,行为树(Behavior T ...

  5. unity行为树制作AI简单例子(1)

    用行为树来制作AI是非常方便的,今天就给大家简单介绍一下行为树的强大之处. 所用插件 Behavior Designer v1.421 最开始 我使用过Rain插件,不过用过Behavior Desi ...

  6. Behavior Designer中的内置消息机制

    最近在用Behavior Designer,其中需要用到消息机制,看了一下其中自带了这套东西 注册 Owner.RegisterEvent<string>("Message&qu ...

  7. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  8. 查找(四)-------基于B树的查找和所谓的B树

    关于B树,不想写太多了,因为花在基于树的查找上的时间已经特么有点多了,就简单写写算了,如果以后有需要,或者有时间,可以再深入写写 首先说一下,为什么要有B树,以及B树是什么,很多数据结构和算法的书上来 ...

  9. 基于R树索引的点面关系判断以及效率优化统计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博客中,我分别介绍了基于网格的空间索引(http:// ...

随机推荐

  1. 数列分块入门1-9 By hzwer

    声明 持续更新,因为博主也是正在学习分块的知识,我很菜的,菜的抠$jio$ 写在前面 分块是个很暴力的算法,但却比暴力优秀的多,分块算法的时间复杂度一般是根号的,他的主要思想是将一个长度是$n$的数列 ...

  2. 我的第一个随笔——MarkDown的简单用法!

    目录 我的第一个笔记 1. 学习简单的markdown语法 1.1 标题 1.2 引用 1.3 倾斜与加粗 1.4无序列表 1.5有序列表 1.6图片和网页 1.7分割线 1.8代码块 1.9结尾 2 ...

  3. linux 安装 phpstorm 并破解

    下载官方软件linux版phpstrom, 貌似很卡要FQ. 我下载我的百度网盘备用了.解压目录, mv 到/opt/ 下 cd进  bin目录下chmod  777 phpstorm.sh执行 ./ ...

  4. 自己动手编写vue插件

    一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...

  5. RequestMapping_PathVariable注解

    [@PathVariable 映射URL绑定的占位符] 1.带占位符的URL是Spring 3.0 新增的功能,该功能在Spring MVC向 REST 目标挺进发展过程中具有里程碑的意义. 2.通过 ...

  6. noip模拟赛 小Y的问题

    [问题描述]有个孩子叫小 Y,一天,小 Y 拿到了一个包含 n 个点和 n-1 条边的无向连通图, 图中的点用 1~n 的整数编号.小 Y 突发奇想,想要数出图中有多少个“Y 字形”.一个“Y 字形” ...

  7. hdu 5015 矩阵快速幂(可用作模板)

    转载:http://blog.csdn.net/wdcjdtc/article/details/39318847 之前各种犯傻 推了好久这个东西.. 后来灵关一闪  就搞定了.. 矩阵的题目,就是构造 ...

  8. 中庸之道(codevs 2021)

    题目描述 Description 给定一个长度为N的序列,有Q次询问,每次询问区间[L,R]的中位数. 数据保证序列中任意两个数不相同,且询问的所有区间长度为奇数. 输入描述 Input Descri ...

  9. jQuery通过event获取点击事件的事件对象

    要想搞明白js的事件机制,必须搞清楚几个概念:事件对象,事件源,还有事件流 事件对象: 当事件发生时会产生事件对象,事件对象的作用是用来记录“事件发生是一些相关的信息.注意事件对象只有在事件发生时才会 ...

  10. Linux下汇编语言学习笔记74 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...