一,行为树几大节点:

  1. Root节点:只能有一个子节点,并且该节点必须是“ 复合”节点。不能将任何Decorator或Service附加到Root,在root可以指定其黑板资源;
  2. Task节点:行为树的叶子节点,可以附加Decorator或Service节点。定义的是AI所执行的任务,例如移动到某个点或者是执行攻击等等,不参与决策行为;Task可以执行失败或成功 ,且只有返回了执行结果Task才会结束,执行下一步决策,在蓝图中即调用FinishExecute函数返回结果;在扩展的Task中最终会调用OnTaskFinish; Task可以具有参数,参数可以是硬编码值或Blackboard Key引用,即Task可以通过设定不同参数,达到复用的效果;

引擎附带了一些内置Task:

  • FinishWithResult: 强制任务立即为此任务返回完成结果(Fail或Succeed)。
  • MakeNoise:产生感知系统噪声的刺激。
  • MoveDirectlyToward:移动到某地,与Moveto区别在于,忽略导航数据。
  • MoveTO:通过导航移动到某点,当到达某点,返回成功,如果导航失败将返回失败。
  • PlayAnimation:此节点播放动画。一般不建议使用,行为逻辑应该与动画层分离;
  • PlaySound:此节点播放声音。
  • Push Pawn Action:添加Pawn Action执行 (ue4 AI模块的Action系统)。
  • RotatetoFaceBBEntry:旋转AI朝向指定的Blackboard的某个值。
  • RunBehavior:将另一个行为树作为一个整体子树运行;
  • RunBehaviorDynamic:与上面一致,但是可以指定运行时的子树;
  • RunEQSQuery:执行EQS查询,查询结果存储在Blackboard中,并返回Task结果。
  • Wait:等待一段时间的Task,可以设置偏移随机,使得每次等待时间不一样。
  • WaitBlackboardTime:跟上一个功能一致,时间是从Blackboard上读取。

3. Composite节点

Composite节点是行为树的决策能力,共有三种复合节点:Selector,Sequence和Simple Parallel。您将发现通过使用Selectors和Sequences的组合,它们的工作方式如下:

  • Selectors:节点将尝试查找其子节点中的一个来执行,找到一个分支或一个任务。执行。,从最左侧的子节点开始尝试执行。如果任务执行失败或整个分支失败,则尝试下一个,依此类推。如果其中一个子级返回Success,表示任务已完成或整个分支已完成,那么Selectors将返回成功的结果给父节点,并不再执行之后的节点。如果Selector的所有子级都返回失败,则Selector返回失败的结果给父节点。
  • Sequences:节点的工作方式与Selectors的相反。要向其父节点返回成功,必须所有Sequence的子项都必须返回成功。从左向右执行,如果其中一个节点执行成功,依次向下执行,知道全部执行成功。如果子节点执行失败,则返回失败,且不再执行后面的节点;
  • Simple Parallel:为简单并行节点,通常用来处理并发行为。运行执行两个子节点:一个必须为task节点A,另一个为一个分支树B。可以理解为,如果执行A任务,那么B也会执行,A是首要任务,B是次要任务。如果主Task失败,则返回失败,但如果主主Task成功,则返回成功。根据其设置,简单并行完成主Task后,可以等待直到子树执行结束,也可以直接向主节点报告成功或失败,并停止执行子树。

4.Deocrator节点

Deocrator节点可以附加到“ Composite”或“ Task”节点。装饰器节点决定是否可以执行行为树中的分支甚至单个节点。从本质上讲,它们是一个条件。可以来控制行为树执行流的打断和跳转。Decorator的ObserverAborts选项值控制其所发挥的作用,当用作条件判断时,ObserverAborts值为None。此时若Decorator节点的判断条件满足,则会执行其所附着的复合节点或Task节点,反正则不执行。另外,Decorator节点还有一个InverseCondition选项,其作用是另判断条件反转。当我们需要自定义装饰器节点时,需要在节点的CalculateRawConditionValue()里编写条件判断逻辑。

ObserverAborts值不为None时,可实现中断正在执行的任务:

1)值为Self时,当条件不满足时,可以中断所在节点的任务和子任务,执行比所在节点优先级更低的任务和子任务;

2)值为LowPriority时,当条件满足时,可以中断比所在节点优先级更低的任务和子任务,执行所在节点的任务和子任务;

3)值为Both时所在节点和低优先级节点都会被中断。

这是虚幻引擎中内置Decorator的列表:

  • Blackboaed: 检查是否在特定的键 黑板是否设置。
  • CheckGameplayTagsOnActor:检查Blackboard指定的Actor上是否存在特定的Gameplay标记。
  • CompareBBEntries:比较两个Blackboard值,并检查它们是否相等。
  • Composite:可以使用布尔逻辑一次组合不同的Decorator。放置此Decorator后,可以通过双击打开它的编辑器。可以使用布尔运算符和其他Decorators构建。
  • ConditionalLoop:只要满足条件,它将不断循环遍历子树。
  • ConeCheck:检查一个点是否在圆锥中,从另一个点开始;锥角和方向可以设置。
  • Cooldown:一旦执行从包含此Decorator的分支中退出,冷却计时器将启动,并且此Decorator不允许该执行再次进入,直到该计时器结束;
  • DoesPath:是否使用导航系统,并检查特定点的路径是否存在。
  • DoesPath:是否使用导航系统,并检查特定点的路径是否存在。
  • ForceSuccess:无论是否从下面报告了失败还是成功,它都会强制子树的成功
  • IsatLocation:检查Pawn是否在特定位置。
  • IsBBEntryofclass:它检查特定的Blackboard Entry是不是特定的Class。
  • KeepinCone:与锥体检查类似,检查观察者是否在锥体内。
  • Loop:会在子树中循环特定次数。
  • SetTagCoolDown:类似于其同义任务Task,更改特定标签的冷却时间。
  • Tag Cooldown:与Cooldown节点相同,但是它具有与Tag关联的计时器。结果,可以通过“设置标签冷却”任务和“设置标签冷却”装饰器来更改此计时器。
  • TimeLimit:它为子树完成执行提供了时间限制。超过用时,此Decorator将停止执行并返回 失败。

4.Service节点

Service节点被设计成用来更新AI“知识”的task节点的“后台”。

Service可以附着在复合节点或者task节点上,当Service节点下面的分支被激活时Service节点会被执行。

但与task节点不同,Service节点不会有任何返回值,也不会直接影响执行流程。

通常,它们通过Tick定期检查并向黑板中存储结果。

主要属性:

1)Interval Tick时间间隔;

2)RandomDeviation Interval的随机偏差;

3)bCallTickOnSearchStart控制初始时调用TickNode。

Service节点附加到Composite或Task节点,并将如果执行其分支,执行多少个父级子级都没有关系,Service节点也将运行。以下截图可以直观地看到这一点:

qteewidgetitem添加子节点_行为树的节点相关推荐

  1. java node子节点_[Java教程]Node节点

    [Java教程]Node节点 0 2016-12-28 15:01:17 1.Node:节点 元素节点->HTML标签 文本节点->文字 但是在标准浏览器(除了IE6~8)中会把空格和换行 ...

  2. 叶子结点和分支节点_什么是叶子节点,度?根节点?

    展开全部 1.叶子也就是leaf指在网络结构中某些计62616964757a686964616fe59b9ee7ad9431333366303766算机,它们从比较靠近中心的计算机处接收信号,而不把信 ...

  3. Java为xml跟节点添加子节点_如何将xml节点作为第一个子节点插入Java中的另一个xml文档中?...

    小编典典 如果事实证明我只是为您做功课,我会感到非常恼火. package com.akonizo.examples; import java.io.ByteArrayInputStream; imp ...

  4. 数据结构树二叉树计算节点_查找二叉树中叶节点的数量 数据结构

    数据结构树二叉树计算节点 Algorithm: 算法: One of the popular traversal techniques to solve this kind of problems i ...

  5. wpf展开树节点_回归树分析与sklearn决策树案例,来玩一会

    摘要: 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树.要想提高决策树的性能还需要做好剪枝的工作. 关键词: 回归树,剪枝 1 回归树 之前已经介绍过决策树的基本理论了:这 ...

  6. maven添加子工程_重量级!Maven史上最全教程,看了必懂

    作者 | 小明菜市场来源 | 小明菜市场(ID:fileGeek)头图 |  CSDN 下载自东方IC 前言 为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven ...

  7. mysql 如何添加子账号_创建子账号

    创建子账号 上一节介绍了如何和 MySQL 建立连接登录到 MySQL,并且对初始化密码进行了修改,本节主要介绍如何新建一个子账号,并且使用子账号登录 MySQL. 1. 使用 root 账号登录 M ...

  8. xshell 登录计算节点_集群服务器节点远程登录使用教程

    集群服务器节点远程登录使用教程 第一步:安装两个软件--XShell &Xftp. XShell是用来远程控制集群节点的,以Linux命令行的形式运行程序. Xftp是用来远程上传下载文件的, ...

  9. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树

    树 树的基本概念 树是一种非线性的数据结构,样子如图所示: 树的主要特点是树中的数据是分层存储的,每个元素称为树的节点,最顶层有且只有一个元素,称为根节点,其余层可以有任意数量的节点.除了根节点,其余 ...

最新文章

  1. 【转】C#生成验证码
  2. mysql关于or的索引问题
  3. 可视化ASP.Net Core Web API健康检查
  4. 编辑器推荐:Visual Studio Code(VSCode/VSC)
  5. centos8 yum太慢_Yum 慢到无法忍受?那是因为你没有这么做
  6. loadrunner取出字符串的后面几位
  7. 不懂电脑如何买电脑_买电脑交智商税?5分钟看懂笔记本电脑配置
  8. C++判断一个序列是否为堆(最大堆、最小堆)
  9. C++: 对字符串转换字符集(编码)
  10. Madwifi Mad coding:自底向上分析associated_sta的更新过程 —— RSSI和MACADDR等信息获取的底层原理...
  11. Python入门学习—元组/字符串(FishC)
  12. java移位运算符详解_java移位运算符详解
  13. java查重精确算法_一个查重算法的多种实现思路
  14. TCP的MTU探测功能
  15. mac不显示安装的程序
  16. 微信支付 商户号该产品权限未开通,请前往商户平台
  17. 严蔚敏《数据结构》——导航
  18. 【5G基础知识】5G网络的架构分析
  19. 实验六 Biopython-1
  20. PX4仿真时,如何在Gazebo下添加物理环境

热门文章

  1. python实现二叉树的重建2 之由中序遍历和后序遍历重建
  2. LeetCode简单题之托普利茨矩阵
  3. LeetCode简单题之有效的字母异位词
  4. MyBatis 一对多、多对一的处理~
  5. ADAS摄像头20个技术挑战
  6. CPU,GPU,Memory调度
  7. deeplearning模型库
  8. 处理器解决物联网和人工智能的融合
  9. H.265视频编码与技术全析(上)
  10. 2021年大数据ELK(四):Lucene的美文搜索案例