基于行为树的AI 与 Behavior Designer插件

优点:

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

时间: 2024-10-24 20:31:24

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

Unity中的行为树插件:Behavior Designer

外国技术人员的插件:http://www.opsive.com/assets/BehaviorDesigner 目前公司内部比较推崇的行为树插件就是这个,虽然有其他几个同类的竞品. 说一句题外话,优秀的插件总是外国人开发的,并且可以将插件开发做成一个小工作室或者个人的主要收入来源,但没看到国人有类似的作品出现. 行为树的概念出现已经很多年了,总的来说,就是使用各种经典的控制节点+行为节点进行组合,从而实现复杂的AI.目前在游戏中一般复杂的AI都可以看到行为树的身影,简单的AI可以使用状态机来实现

Behavior Designer 行为树入门

本篇教程将带领大家熟悉 行为树插件之Behavior Designer .本篇教程不会出现过多的代码,故也适合策划学习.你将学习到一种新的动画与AI的解决方案使即使用Behavior Designer来设计动画的播放逻辑与AI的行为逻辑, 如果你用过PlayerMaker那么再好不过了,你可以Behavior Designer当作是PlayerMaker的强化版但有不同于PlayerMaker.当然我不是在这里推崇这种插件,而是了解另一种设计思路.当然在现在国内对于Behavior Design

[Unity插件]Behavior Designer:制作敌人AI

一个简单的敌人AI: 当处于监视范围内,跑向玩家:当处于攻击范围内,攻击玩家:否则呆在原地.用行为树表示就是: 其中当前行为树的变量与全局变量为: 效果图: 制作简单的AI确实不需要写代码,不过配置起来确实有点麻烦了.可以根据需求,编写自定义的节点来组成复杂的AI. 当游戏需要大量的AI时,Behavior Designer确实是一个不错的选择,因为自定义的节点可以不断被重用了.

【U3D】初识Behavior Designer行为树(一)

本系列文章由@萌萌的一天出品,未经博主允许不得转载.   Behavior Designer行为树插件介绍        Behavior Designer是U3D AssetStore上很优秀的一款插架,它在基于Behaviour Tree相关原理的基础上拓展出了更加复杂的模块,并且运用了很强大的人工智能技术.第一个将Behaviour Tree概念应用到游戏的产品是Xbox上的<Halo 2>,之后更多的游戏开发者选择应用Behavior Tree而不是Hierarchical FSM来控

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

用行为树来制作AI是非常方便的,今天就给大家简单介绍一下行为树的强大之处. 所用插件 Behavior Designer v1.421 最开始 我使用过Rain插件,不过用过Behavior Designer后感觉界面更为直观,更容易设计出AI 新建一个项目,先导入该插件 新建一个Cube,命名为Floor,作为本场景的地板,Scale设置为(20, 0.1, 20),Tag设置为Floor 创建一个Capsule,命名为Player,Tag设置为Player,添加一个简单的Player脚本控制

Behavior Designer笔记

1.总览 Behavior Designer是一个行为树程序.他为所有人设计-程序美工策划.Behavior Designer提供很好很强大的API,允许你愉快的进行玩耍.他和PlayMaker和uScript插件完美结合,提供直观可视化编辑器类.你可以不写一行代码也能创造复杂AI. 这篇文章将为Behavior Designer所有方面进行一次总体介绍.如果你不知道啥子是行为树,现在老子就告诉你. 行为树是一种流行AI技术.许多游戏都用到,HALO2是第一款使用行为树的主流游戏.HALO2制作

Behavior Designer中的内置消息机制

最近在用Behavior Designer,其中需要用到消息机制,看了一下行为树其中自带了这套东西 注册 Owner.RegisterEvent<string>("Message", Message); 反注册 Owner.UnregisterEvent<string>("Message", Message); 发送消息 Owner.SendEvent("Message", "Finished B Action&

基于语法树的语句识别算法

需求分析 自然语言处理的人机对话中,用户的语句表达具有多样性,例如"我喜欢你"."你被我喜欢着"表达的是同一个意思,如何让计算机理解识别这些多样化的句子,面对各式各样的同义问题,都能作出相同的问答,本文尝试通过语法树.依赖树等工具将多样化的问句转换成较为统一形式的句子,以方便计算机识别这些语句. 特征表示 我们的目标是解决中文语句的多样性,考虑到如果直接使用词汇作为特征,有可能由于多样化的组合导致问题复杂化,例如:①你被我喜欢着:②她被我喜欢着,都可以转换成相同的形

基于 trie 树的最长匹配分词测试

测试一个基于trie树的分词,没有应用任何统计模型,分词的效率估计会很高但是分词准确率很差. reference http://www.hankcs.com/program/java/tire-tree-participle.html https://github.com/ansjsun/tree_split