##UE4 AI行为树简记
###行为树节点 官方文档
Composites
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 节点用于执行具体的动作,引擎内置的 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
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 time | Cooldown 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
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 事件