返回 导航

UE5

hangge.com

UE5 - AI行为树内置的装饰器节点详解(附:各节点的使用场景)

作者:hangge | 2026-01-29 08:59
    装饰器节点和服务节点一样,是辅助节点,需要挂载在一个主要节点上。装饰器节点能够做很多有用的事,除了最重要最常见的条件判断以外,它还能给我们的主要节点做一些魔法般的操作。本文将详细介绍官方现在提供了哪些装饰器节点,以及它们各自的作用。

一、Blackboard 

1,功能介绍

(1)Blackboard 节点是最常用的装饰器节点之一,我们可以使用这个节点来判断黑板中某个条目的数值是否满足需求
(2)选中 Blackboard 节点,可以在细节面板中看到它的设置参数。一个参数是“黑板键”BlackboardKey,表示我们要判断的黑板条目。根据黑板条目的值类型,另外两个选项会发生不同的变化。 
  • 当黑板条目的类型是 ObjectBoolean 或者 Vector 时,出现“键查询”Key Query 设置,下拉框中有“已设置”Is Set 和“未设置”Is Not Set 两个选项。对于 ObjectVector 来说,表示黑板条目的值是否已经被设置。对于 Boolean 来说,代表黑板条目的值是 True 还是 False
  • 当黑板条目是 Int 或者 Float 类型,节点可以用来比较黑板条目所记录的值与设置的数字“键值”KeyValue 的大小关系,出现“键查询”KeyQuery 和“键值”KeyValue 两个设置,“键查询”包括等于、不等于、小于、小于等于、大于、大于等于六个选项,“键值”是用来与黑板条目的值进行对比的数字。 
  • 当黑板条目的类型是字符串(Name 或者 String 类型)时,我们可以将黑板条目的值与另一个字符串进行比较。 

2,使用场景

(1)敌人侦测与追击
  • 在一个潜行或者战斗型 AI 行为树中,我们常常需要判断目标是否进入侦测范围。此时可以在「侦测」Selector Sequence 节点下挂一个 Blackboard 装饰器,判断黑板中 “TargetActor” 是否已被设置(Is Set)。只有目标存在时,才会进入后续的追击分支,否则跳过并执行巡逻逻辑。
(2)血量监控与撤退
  • 对于有“血量”属性的角色,可以在撤退行为的前节点挂一个 Blackboard 装饰器,当黑板中的 “Health” 数值小于等于某个阈值(如 30)时,触发撤退序列;大于阈值时,则继续战斗分支。这种方式能让 AI 根据自身状态动态切换行为。
(3)拾取物品时机判断
  • 在有物品收集需求的 AI(比如 NPC 自动拾取掉落物)行为树中,可以在拾取动作节点前挂一个 Blackboard 装饰器,比较 “ItemCount” 是否小于背包最大容量(KeyValue = MaxCapacity)。当背包未满时才执行拾取,满载时则跳到返回存储或者继续其他任务的分支。

二、Compare BBEntries 

1,功能介绍

(1)Compare BBEntries 节点可以用来比较黑板中的两个条目是否相同或不同。
(2)该节点有有三个参数:
  • “黑板键 ABlackboardKeyA 和“黑板键 BBlackboardKeyB 为要比较的两个黑板条目;
  • “运算符”Operator 的参数则包括了两种选项“等于”和“不等于”。

2,使用场景

(1)目标切换检测
  • AI 需要在两个潜在目标之间切换时,可以使用 Compare BBEntries 判断“CurrentTarget”是否与“NewTarget”不同(Operator = 不等于)。如果不同,则执行“切换目标”任务;否则保持当前目标不变,避免重复切换造成的不必要开销。
(2)队伍角色分配
  • 在一支由多个 AI 组成的小队中,可在“分配任务”节点前挂上 Compare BBEntries,比较黑板中“AISlotID”与“AssignedSlotID”是否相同。只有当两者不相同时,才重新分配位置或行为,确保每个成员只在首次分配或变更时才执行重置逻辑。
(3)资源储备校验
  • 在资源收集或建造逻辑中,AI 可能要保证当前库存与目标库存同步。可用 Compare BBEntries 判断“CurrentWoodCount”(Int)与“TargetWoodCount”是否不等;如果不足,则继续采集;相等时则进入建造流程。

三、Is At Location 

1,功能介绍

(1)IsAtLocation 的作用是判断角色是否在某个位置的范围内。
(2)该节点的参数如下:
  • “可接受半径”AcceptableRadius 表示当离目标地点多近时通过判断,它的单位是厘米。
  • “黑板键”BlackboardKey 则指向一个黑板条目,数据是要判断的目标地点位置。当黑板条目中是 Vector 类型时,直接将其作为目标位置;当黑板条目中的数据是 Actor 时,获取 Actor 所在的位置作为目标位置。 

2,使用场景

(1)巡逻点到达检测
  • 在巡逻行为的最后一个节点前挂一个 IsAtLocation 装饰器,判断 AI 是否已经到达当前巡逻点(BlackboardKey = “PatrolPoint”,AcceptableRadius = 100cm)。只有到达后才切换到下一个巡逻点或执行驻守动作,否则持续行走。
(2)掩体寻找与利用
  • 对于射击型 AI,可在“进入掩体”任务前挂一个 IsAtLocation 装饰器,判断 AI 是否已到达黑板中记录的安全掩体位置(BlackboardKey = “CoverLocation”,AcceptableRadius = 50cm)。到达后再切换到“待机射击”或“俯身射击”逻辑,确保 AI 在正确位置进行射击。
(3)交互触发条件
  • AI 需要与某个游戏对象(如门、开关、NPC)进行交互时,可在“交互”节点上添加 IsAtLocation,黑板键指向该对象 ActorAcceptableRadius = 75cm)。只有在接近交互点时才触发交互动画或事件,避免 AI 在远处就执行动作。
(4)物品投放与拾取
  • 对于递送任务,AI 在到达投放点后才放下物品。可在“放下物品”任务节点前挂 IsAtLocation,黑板键指向投放位置,当 AI 进入可接受半径范围内,再执行投放动作;同理用于自动拾取场景。
(5)路径中途行为切换
  • 在长路径行走上,为了让 AI 在途中做一些临时操作(如查看地图、埋伏),可以事先将关键点位置写入多个黑板条目,并在相应 Task 前挂 IsAtLocation,分别判断是否到达某个中途点,再临时切换到“观察”或“蓄力”动作,增加行为多样性。

四、Is BBEntry Of Class

1,功能介绍

(1)lsBBEntryOfClass 可以用来判断黑板中 Object 类型条目值的类型与指定的类型是否相同。
(2)该节点参数如下:
  • “测试类”TestClass 是要测试的类型,可以在这里展开所有的类型; 
  • “黑板键”BlackboardKey 表示要测试的黑板条目,下拉框中只会显示 Object 类型的黑板条目。 

2,使用场景

    比如游戏中有两种敌人,分别对应的类型是 Enemy1Enemy2。 在行为树中,我们会通过服务节点将主角遇到的敌人写入到黑板值中。在某种情况下主角只需要对 Enemy1 做出响应,那么我们可以使用 IsBBEntryOfClass 节点,选中敌人对应的黑板条目,并将“测试类”设置为 Enemy1。 

五、Cooldown 

1,功能介绍

(1)Cooldown 缩写为 CD,其实就是我们游戏中经常看到的“冷却”概念。给主要节点附加 Cooldown 装饰器之后,在运行过该主要节点的若干秒之内,将无法再次进入该节点。
(2)在它的参数中,最重要的就是“冷却时间”,这个参数表示经过此次运行之后,节点还需要冷却的时间,单位是秒

2,使用场景

    假设我们的角色总共有两种技能,其中技能 A 是大招,会优先释放,但是有大招会有 CD 的限制,每 5 秒才能发动一次。在大招的 CD 期间,会执行技能 B。那么使用行为树按照图下所示设置(假设这里用 Wait 任务表示对应的技能任务节点)。 

六、Conditional Loop 

1,功能介绍

(1)使用 ConditionalLoop 节点可以让我们在某些条件下一直执行该装饰器节点所挂载的主要节点。
(2)该节点和 Blackboard 节点类似,它会接受一个 BlackboardKey 参数来指定黑板条目然后根据黑板条目的值类型显示不同的判断逻辑。 

2,使用场景

    这个节点的使用场景可以很多。比如我们有一个任务节点是给主角的武器加入一颗子弹,那么可以将主角武器目前的子弹数记录在黑板条目中,比如“BulletCount”,然后将 ConditionalLoop 节点挂载在装子弹的任务上。并且将 BulletCount 和目标子弹数做比较。当子弹数小于 5 的时候,该任务就会被不断循环执行。 

七、Force Success 

1,功能介绍

ForceSuccess 装饰器节点挂载到主要节点上后,不管这个主要节点的运行结果是成功还是失败,都会被强制变为成功。

2,使用场景

(1)比如说我们有一个顺序节点 Sequence,挂载着三个子任务(这里使用 Wait 代替),分别负责获取物品 ABC。我们的需求是,即使其中任何一种物品如果获取不到(这会导致对应的任务失败),也不想影响下一个物品的获取。如果不装载这个 ForceSuccess 节点,那么 Sequence 在检测到某个子任务失败之后,会直接判断为该 Sequence 执行失败,并不再执行下一个子任务。
(2)如果我们给获取 ABC 的三个任务都装载上 ForceSuccess 装饰器, 那么就可以保证三个任务最后都被强制为执行成功,于是 Sequence 就会一直顺利地运行下去。 

八、TimeLimit 

1,功能介绍

(1)TimeLimit 节点的作用是限制其附着的主要节点的执行时间。如果在 TimeLimit 节点设定的时间之后,节点还没有结束,那么节点的执行会被打断。
(2)该节点有一个参数为“时间限制”TimeLimit,表示要限制的时间,单位为秒。

2,使用场景

    比如我们在场景中有一个让角色搜集某种物品的操作任务,角色的物品搜集任务是随机事件的,但是我们希望给它设置一个最大的搜集时间,一旦超过这时间就打断搜索任务,那么可以拖动出如下图所示的行为树。 

九、合成

1,功能介绍

在合成装饰器中,我们可以使用 ANDOR 节点来组合多个装饰器节点的逻辑,来得到一个最终的判断值。 

2,使用场景

(1)假设在游戏中,角色需要距离目标点一定范围之内并且子弹数超过 5,才会对目标点发动进攻。那么,我们可以在进攻节点上添加一个合成节点。

(2)双击合成节点,就可以编辑它的逻辑,现在在合成节点的编辑界面中,只有一个 Result 节点,表示最终的结果。 我们添加如下逻辑:
  • 在空白处右击,分别拖动出 IsAtLocationBlackboard 节点。分别选中这两个节点, 在细节面板中设置参数。
  • 这两个装饰器节点之间是“且”的关系,所以我们需要一个 AND 节点。在空白处右击拖动出节点搜索框,搜索并选中“AND”,可以看到 AND 节点总共有两个输入管脚。我们分别将两个装饰器节点的管脚连接到 AND 的两个管脚上。
  • 最后再将 AND 节点的输出管脚连接到 Result 节点的 In 管脚上。

(3)切回到行为树编辑器,可以看到节点显示如下。
评论

全部评论(0)

回到顶部