注意:从组合节点衍生出来的节点可以称为子树(subtree)。通常来说,这些节点就统称为一个行为。比如,Sequence,Move To Enemy,Rotate Towards Enemy和Attack就统称为“攻击敌人”行为。
如果Sequence的任意节点执行失败,整个Sequence节点就会停止执行。
比如,如果角色无法移动到敌人身边,Move To Enemy节点就执行失败了,这样Rotate Towards Enemy和Attack节点也就无法继续执行了。反之,如果角色成功移动到敌人边上,就能执行随后两个节点。
后续我们还会学习Selector组合节点,不过现在先让我们用Sequence节点实现角色随机移动到某个位置并原地停留。
随机移动位置
这样就会新建一个服务并自动打开,我们回到Content Browser将其重命名为BTService_SetRandomLocation。
服务应当且仅当在角色准备移动时才执行,因此我们要将它附着在MoveTo节点上。
打开BT_Muffin,右键点击MoveTo节点,从弹出菜单选择Add Service\BTService Set Random Location。
Event Receive Activation AI节点会在其父类(本例中的MoveTo节点)激活时执行GetRandomPointInNavigableRadius节点返回角色500单位半径内的一个随机可达目标点Set Blackboard Value as Vector节点将一个黑板键值(BlackboardKey)数值设为随机位置点
默认情况下,AI感知只检测敌人(被指定为不同队伍(team)的Actor)。然而,Actor默认是没有设置队伍的,如果Actor没有队伍,AI感知就会将其认为中立(neutral)角色。
截至目前,还没有方法能通过蓝图设置Actor的队伍,退而求其次,我们展开Detection by Affiliation设置,启用Detect Neutrals。