Composites 类型的节点定义一个分支的根以及在该分支上被如何执行的基本规则
Select
从左往右执行其子节点,直到一个达成,则 Select 达成并返回上层,否则失败并返回上层
Sequence
从左往右执行其子节点,直到一个失败,则 Sequence 失败并返回上层,否则达成并返回上层
Simple Parallel
包含一个main task和一个sub tree, main task支持一个 Task 节点,用于执行一个主线行为,sub tree 支持一个行为树,伴随 main task 执行,返回结果是main task的执行结果
Finish Mode 属性 Immediate:在 main task 执行完成时,打断 sub tree 并返回上层 Delayed:在 main task 执行完成时,如果 sub tree 没有执行完,则等待它执行完成再返回上层Task 节点用于执行具体的动作,引擎内置的 Task 常用的有 Wait 、 Move To 、 Is At Location 等等,Task 一般是自行实现的AI具体的行为逻辑,其中的代码与普通蓝图代码一样
Task 中的常用事件
Event Receive Execute / Event Receive Execute AI 定义该 Task 的主体逻辑代码,如果没有特殊需求,则必须以 Finish Execute 节点结束,因为只有 Finish Execute 节点才能想上层返回执行结果,否则该 Task 如果不被打断将不会执行完成 如果同时存在 Event Receive Execute 和 Event Receive Execute AI 两个事件,优先执行 Event Receive Execute AI 事件 Event Receive Abort / Event Receive Abort AI 当前任务被打断时触发该事件,用来处理突发情况对当前行为的影响,如果没有特殊需求,则必须以 Finish Abort 节点结束,以结束该任务节点的执行 如果同时存在 Event Receive Abort 和 Event Receive Abort AI 两个事件,优先执行 Event Receive Abort AI 事件Decorator 类型的节点用作条件判断(类似于程序中的基本流程控制),附着于 Composites 或 Task 节点上
常用 Decorator 条件
Blackboard 判断指定的黑板的键值是否符合判断条件 属性描述Notify Observer 规定条件重新评估的时机On Result Change 适用于范围性检测,当检测的值越界时进行重新评估该条件产生的结果 On Value Change 适用于精确检测,当检测的值发生变化时进行重新评估该条件产生的结果Observer Aborts 条件判定结果变化时,要中断的执行节点None 不中止执行 Self 中止Self,以及在此节点下运行的所有子树 Lower Priority 中止此节点右方的所有节点 Both 中止Self及Self所有子树,以及它右方的所有节点Key Query 比较条件[ int / float / enum ] == / != / > / >= / < / <= [ object ] Is Set 有值 / Is Not Set 没值 [ vector / rotater ] Is Set 初始化 / Is Not Set 未初始化Blackboard Key用于检查的黑板的键。对可返回None的数据类型(如物体)作用最佳,因为其他类型的数据可能返回其初始化值(0、false 、 {0,0,0}等)Node Name行为树图表中显示的节点名称 Composite 通过 Composite Decorator 节点可设置比内置节点更高级的逻辑,但无法达到完整蓝图的复杂程度 属性描述Composite Name行为树图表中显示的节点名称Show Operations使操作以纯文本方式列于节点上 Loop 循环指定的次数或无限循环 属性描述Num Loops循环的次数Infinite Loop是否进行无限循环Node Name行为树图表中显示的节点名称 Conditional Loop 带条件的循环,如果Blackboard上指定的键值满足条件则进行循环 属性描述Node Name行为树图表中显示的节点名称Key Value[ int / float / enum ] == / != / > / >= / < / <= [ object ] Is Set 有值 / Is Not Set 没值 [ vector / rotater ] Is Set 初始化 / Is Not Set 未初始化Blackboard Key用于检查的黑板的键。对可返回None的数据类型(如物体)作用最佳,因为其他类型的数据可能返回其初始化值(0、false 、 {0,0,0}等) Cone Check 检测指定的位置或Actor是否在椎体范围内,返回bool结果 属性描述Cone Half Angle椎体的半角。对于90度的椎体而言,这个值应该设置为45度Observer Aborts 条件判定结果变化时,要中断的执行节点None 不中止执行 Self 中止Self,以及在此节点下运行的所有子树 Lower Priority 中止此节点右方的所有节点 Both 中止Self及Self所有子树,以及它右方的所有节点Cone Origin椎形开始的位置(锥形尖端)Cone Direction锥形口的朝向Observer被检查的位置或Actor,确定是否在锥形内Inverse Condition结果是否翻转(true变为false,false变为true)Node Name行为树图表中显示的节点名称 CoolDown 会锁定一个节点或分支的执行,直到冷却时间结束 属性描述Cool Down timeCooldown decorator 锁定此节点执行的冷却时间(以秒计算)Observer Aborts 条件判定结果变化时,要中断的执行节点None 不中止执行 Self 中止Self,以及在此节点下运行的所有子树 Lower Priority 中止此节点右方的所有节点 Both 中止Self及Self所有子树,以及它右方的所有节点Node Name行为树图表中显示的节点名称 Does Path Exist 确定路径是否可由以下两个矢量组成:Blackboard Key A 和 Blackboard Key B (判定SelfActor与TargetPawn是否存在一条可以到达的路径,返回bool结果) 属性描述Blackboard Key A路径中的第一个位置Blackboard Key B路径中的第二个位置Path Query Type 路径计算类型NavMesh Raycast 2D 非常快 Hierarchical Query 快 Regular Path Finding 慢Inverse Condition结果是否翻转(true变为false,false变为true)Observer Aborts 条件判定结果变化时,要中断的执行节点None 不中止执行 Self 中止Self,以及在此节点下运行的所有子树 Lower Priority 中止此节点右方的所有节点 Both 中止Self及Self所有子树,以及它右方的所有节点Filter Class确定使用的导航数据。如果设为None,则将 使用默认的导航数据Node Name行为树图表中显示的节点名称 Force Success 强制使所附着的节点返回执行成功结果 属性描述Node Name行为树图表中显示的节点名称Services 附着在 Composite 节点上,只要其分支节点被执行,它们便将按所定义的频率执行。它们常用于检查和更新黑板。它们以行为树系统的形态取代了传统平行节点
可在行为树图表编辑界面添加自定义的Service,在Service中添加若干Blackboard Key Selector类型的引用变量暴露出来并编译,然后将Service附着在Composites或者Task节点上,在节点上点击已附着的Service,在其属性栏中为其中的变量指认黑板上的键,然后在Service中编写逻辑代码对已指认的变量进行更新
Service中的常用事件
Event Receive Search Start / Event Receive Search AI 在任务搜索进入树的分支时被调用。比如有一个父节点A,其下面有两个子节点B和C,当任务搜索进入A时调用A的Service中的Search Start,如果A完成或者被打断,当任务搜索进入B时,将再次调用A的Service中的Search Start 如果同时存在 Event Receive Search Start 和 Event Receive Search Start AI 两个事件,优先执行 Event Receive Search Start AI 事件
Event Receive Activation / Event Receive Activation AI 在某节点从非活动子树的一部分变为活动子树的一部分时触发 如果同时存在 Event Receive Activation 和 Event Receive Activation AI 两个事件,优先执行 Event Receive Activation AI 事件
Event Receive Deactivation / Event Receive Deactivation AI 在某节点从活动子树的一部分变为非活动子树的一部分时触发 如果同时存在 Event Receive Deactivation 和 Event Receive Deactivation AI 两个事件,优先执行 Event Receive Deactivation AI 事件
Event Receive Tick / Event Receive Tick AI 当Service所在的节点是活动子树的一部分时,Tick事件将以指定的频率调用,Tick的触发时间间隔由所在Service的Interval和Random Deviation属性共同决定,Interval指定基础时间间隔,Random Deviation指定在基础时间间隔上的随机误差 如果同时存在 Event Receive Tick 和 Event Receive Tick AI 两个事件,优先执行 Event Receive Tick AI 事件