一、中断类型

设置了中断之后,行为树会检测执行过的子条件节点,当条件节点的状态发生变化时,会中断正在执行的Running节点,转而立即执行该条件节点。

行为树的打断类型有4种:

  • None
  • Self
  • Lower Priority
  • Both

二、类型详细介绍

(1)Self:打断自己的直接子节点

  • 当前分支处于Running状态
  • 必须是条件节点才能监听状态变化来打断别人
  • 条件节点的优先级必须比Running节点的优先级高(即在其左边)
  • 条件节点必须是当前组合节点(设置了打断类型为self的节点)的直接子节点,孙子节点都不行
  • 条件节点的状态必须发生变化才能打断。(这个好理解)

如上图,当Selector设置了打断类型为Self的时候,一开始检测键盘某key没有按下,于是执行 Wait。 当Wait还未结束的时候,这个时候如果按下了某key,那么【Is Key Down】节点会立即执行,随后返回成功,Selector也返回成功。

(2) Lower Priority:打断比自己优先级低的节点

  • 当前组合节点(设置打断的组合节点)没有在Running状态,且已经执行结束。
  • 比当前组合节点低优先级的兄弟节点所在的分支处于Running状态,也就是说当前组合节点的父节点处于Running状态。
  • 条件节点是当前组合节点的直接子节点(不包括孙子节点)。
  • 条件节点处于执行路径上。例如父节点为selector节点,只会重新评估到第一个成功的条件节点为止的节点序列。
  • 条件节点的状态发生变化。
  • 设置低优先级打断的组合节点可以嵌套。用来将孙子辈的节点加入重新评估列表。但是嵌套不能断层。

上图中,设置打断类型为低优先级打断。一开始未按下某键,执行Wait。 当按下某key之后,打断了右侧低优先级的key。

(有人会问,不是直接子节点才会检测吗,这个Inverter是取反,并不是条件节点。 我猜测他和Is Key Down组合起来,也是条件节点)

这种嵌套也是可以检测按键按下,并中断Wait的。

 (3)Both:打断兄弟和自己

  Self和Low Priority的结合体。既会中断兄弟节点中低优先级的节点,又会中断自身孩子节点中的Running节点。


三、简单小例子

设定:敌人一开始在发呆。当它看见玩家之后,会去追玩家。当玩家逃脱敌人视线之后,敌人恢复到发呆状态。

此时的行为树状态:

如果这个时候,玩家向敌人移动,进入了敌人的视线。 条件判断节点【AICanSeeObj】返回成功,则行为树就会打断节点【AIDaze】,转而运行节点【AIMoveTo】。

敌人就会向玩家移动。

此时的行为树状态:

如果中断类型仅仅设置为打断低优先级,那么 行为树会一直执行节点【AIMoveTo】。无论玩家是否逃出 了 敌人的视野范围,都是一直这么执行下去。这样显然不符合游戏逻辑设计。

所以,还需将打断类型增加个 打断自己。这个时候,行为树会检测条件节点【AICanSeeObj】,玩家逃出敌人范围之后,自动打断节点【AIMoveTo】。

行为树继续执行节点【AIDaze】,敌人继续发呆 (◎_◎;)


行为树demo 项目:

https://pan.baidu.com/s/1I2IBtou4hsystzRAAr3gUw

Unity 行为树-中断机制的更多相关文章

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

    继续昨天的工程,给Monster添加一个空物体命名为AI,在AI添加脚本BehaviorTree,然后就可以打开行为树编辑器进行编辑了 先写好自定义的节点脚本,下面是一个寻找漫游点的行为节点脚本 us ...

  2. Unity 行为树-基础

    .前言 Unity里面的行为树又名BehaviorTree,最常用在NPC的敌人逻辑中. 二.基础说明(转载) 1.行为树的调用时间为每帧: 2.每个节点的状态只能下面3个中的其一:成功Success ...

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

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

  4. Unity 行为树-管理

    引言 在代码里面动态的操作单颗行为树 以及 管理所有的行为树,也是一个很重要的事情. 一.操作单颗树 这是我们项目里面,一个敌人绑定了行为树,自动创建的behavior tree 脚本. 红框放大: ...

  5. Unity 行为树-共享变量

    一.引言 有以下小场景: 节点A:发现了 敌人. 节点B:追逐敌人. 对于同一个敌人物体,节点AB之间是如何传递数据 的呢? 行为树节点AB之间,需要一个中间变量Temp来传递数据. A发现了敌人,将 ...

  6. Unity 行为树-节点间数据传递

    一.引言 有以下小场景: 节点A:发现了 敌人. 节点B:追逐敌人. 对于同一个敌人物体,节点AB之间是如何传递数据 的呢? 二.数据传递的3种方式 1.共享变量:面板中创建局部或者全局的共享变量Te ...

  7. [Unity插件]Lua行为树(一):BehaviorDesigner源码分析

    BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的. 首先下载BehaviorDes ...

  8. BleedTree动画混合树[Unity]

    Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出.所以,手册才是王道. 游戏动画中的一个常见任务是在两个或更多相似运动之间混合.最佳的已知示例可能是根据角色速度混合行走和奔跑动画.另一个示例 ...

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

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

随机推荐

  1. LoadRunner11学习记录一 -- 安装

    一.首先是安装,相关的下载文件如下: 安装文件:http://pan.baidu.com/s/1ntH0Rd3 破解补丁:http://pan.baidu.com/s/1hq2HRsK 汉化包:htt ...

  2. code1043 方格取数

    第一次走用dfs枚举每种情况,第二次走用dp求剩下的最大值 设一个点集q用来保存有价值的点,排序,在最后加一个终点:x=m+1,y=m+1,v=0  //m是矩阵长宽 因为v=0的点是没有意义的,所以 ...

  3. 4款最受欢迎的Mac原型工具

    原型工具中Wireframe, Mockup和prototype之间的有什么不同? 无论你是一名刚入行的UX/UI设计师,还是入行多年的老手,在制作原型的过程中一定接触或听说过其中很重要的三个原型术语 ...

  4. excel判断新增使用字典作为页面级数据库,减少io

    前提:该机构录入的都是和该机构有关的数据,机构下的funmental(idcard唯一)和creditinfo(funmentalid唯一)不能重复所以推出以下结论:1.根据userid(机构)=&g ...

  5. MemoryUsage:监测java虚拟机内存使用

    通过MemoryUsage可以查看Java 虚拟机的内存池的内存使用情况.MemoryUsage类有四个值(均以字节为单位): ===Init=== java虚拟机在启动的时候向操作系统请求的初始内存 ...

  6. Mybatis:动态sql

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

  7. css确定取消 悬浮底部样式 和 金额 后缀

    .blockquote-bottom { width: 100%; position: fixed; margin: 0; bottom: 0; left: 0; text-align: center ...

  8. Spring框架总结(四)

    对象依赖关系 Spring中,如何给对象的属性赋值?  [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 一.对象属性赋值 ...

  9. Word2010如何编辑好了直接发布csdn博文?

    目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...

  10. java 获取cookie

    # GetCookie.java package com.meicai.tms; import java.io.BufferedWriter; import java.io.File; import ...