Behavior Designer插件解析

选择节点和条件节点和并行节点这种非叶子节点都有一个中止类型
在这里插入图片描述

当某个分支下某一个节点处于running时,会向父节点返回running状态,并将父节点设为running状态,然后一直往上传递记录,传递完成,当前行为树完成,等待下一次(下一帧)时重新进入分支时,会从孩子列表中寻找running状态的节点更优先继续执行。

Self:当自身的孩子节点中有一个running状态时,自身不会设为running状态,而是设为初始状态。
当自身是选择节点时,自身子节点执行顺序不受running影响了,当返回success或者running时,会将记录的那条running节点重置恢复,
当自身是选择节点时,running之前的节点执行顺序不受running影响了,返回failure或者running时,会将记录的那条running节点重置恢复,

LowerPriority:当running节点是比自身优先级低时,会将自身的状态设为running,下次执行的时候会优先执行自身这个running,
当父节点是选择节点时。自己的执行顺序不会受优先级低的running节点影响,当自身返回success或者running时,会将记录的那条running节点重置恢复。如果自身子节点返回的是running,保留这一条running状态。否则将自身这一条也重置掉
当父节点是顺序节点时,自己的执行顺序不会受优先级低的running节点影响,,当自身返回的事failure或者running时,会将记录的那条running节点重置恢复,如果返回的是running时,会保留自身这一条running,否则自身也会重置

Both:LowerPriority+Self

添加自定义行为:
根据需求,创建一个类继承这四个类中的一个在这里插入图片描述
,就可以在面板上添加了,其实翻一下源码,其实都是继承了Task类。
Composites和Decorators因为不是叶节点,需要封装一层(ParentTask),记录所有的子节点,根据需求当子节点返回状态时,处理后选择是向父节点返回状态还是选择下一个子节点执行,还是根据Abort类型进行处理后在执行
里面的核心主要是一些周期函数
Void OnAwake() 只执行一次
Void OnStart() 当前任务开始执行时只执行一次
TaskStatus OnUpdate() 返回这个任务当前的状态:Inactive,Failure ,Success ,Running根据父节点任务进行选择是继续执行还是中止。

获取某个行为树中某个Task:
获取行为树:先找到游戏物体,在直接通过GetComponent()获取
获取行为树上的Task:通过调用BehaviorTree对象中API
T FindTask() where T : Task;通过类型获取
Task FindTaskWithName(string taskName),通过任务名字获取,然后在转成子类就可以了

搜索是通过DFS进行搜索,如果有相同的,最前面的优先。应当采用
List FindTasks() where T : Task;
List FindTasksWithName(string taskName),

变量共享可以通过黑板模式,定义一个公共使用的黑板类。将变量赋值和使用

Guess you like

Origin blog.csdn.net/weixin_44806700/article/details/121555499
Recommended