qteewidgetitem添加子节点_行为树的节点

f2a547411565ad2b3ab89599bba78149.png

一,行为树几大节点:

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

133fd4ba2f9015030cf8f92a156a569f.png

引擎附带了一些内置Task:

083b26ebb4821bf578d77afaa4df2388.png
  • 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的列表:

4e61ffaf504166a0e21bb22e6f7b6dad.png
  • 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节点也将运行。以下截图可以直观地看到这一点:

d807f53b361257b5bc5bd32348bea24e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值