本系列文章由优快云@萌萌的一天 出品,未经博主允许不得转载。
一:Behavior Designer中的Composites Node
复合(Composites )是行为树中的重要概念,一个复合节点下面必须有至少一个的子节点,它的返回状态取决于它子节点的状态。下面是一个简单的AI例子,实现了敌人看到玩家并进行追击的功能:
可以看到,一个行为树中可以有多个复合节点,任意节点下可以包含多个复合节点,通过这种方式,我们可以对许多的行为进行合理有序的组合,从而产生清楚的行为逻辑。
Composites Node下包含多种的复合节点类型,下面进行逐一说明:
Parallel Node:
同时运行它的所有子节点,当所有的子节点返回True,则它自己将会返回True。如果有至少一个子节点返回False,那么它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
上述例子可以看到,Parallel Node下有四个子任务(吃饭、等待10s、碎觉、打豆豆),当运行行为树之后这四个任务会并行运行,后台会同时有三个Log输出,当“等待10s”任务完成后,Parallel Node将会返回True给上一级的节点。
Selector Node:
Selector Node类似于编程语言中的"or"语句操作,
当至少有一个
子节点返回True,则它自己将会返回True。
如果所有的子节点返回False,那么它自己将会返回False。
如果有至少一个子节点返回Running那么它自己将会返回Running。
Sequence Node:
Sequence Node类似于编程语言中的"and"语句操作,当所有的子节点返回True,则它自己将会返回True。如果有至少一个子节点返回False,那么它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
Parallel Selector Node:
Parallel Selector Node类似于Selector Node,当至少有一个子节点返回True,则它自己将会返回True。不过有区别的是,Parallel Selector Node会并行运行它所有的子节点,如果有一个子节点返回True,那么它自己则将会返回True,并结束其它所有的子节点(其它子节点返回False)。如果所有的子节点返回False,它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
上述例子可以看到,Parallel Selector Node下有四个等待任务,分别等待10s、20s、30s、40s,当第一个等待任务完成后(经过10s之后),其它的等待任务会停止进行,Parallel Selector Node自己返回True。
Priority Selector Node:
Priority Selector Node类似于Selector Node,当至少有一个子节点返回True,则它自己将会返回True,并结束其它所有的子节点(其它子节点返回False)。不过有区别的是,Priority Selector Node会并行运行它所有的子节点。如果所有的子节点返回False,它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
如果要使用此节点类型,你需要对子节点的优先级进行设置。设置方式是需要重写GetPriority()方法,它返回Float类型,当返回值越大,则表示优先级越高,越先进行执行。
public override float GetPriority()
{
return base.GetPriority();//此处重写<span style="font-family: 'Microsoft YaHei';">GetPriority()方法</span>
}
Random Selector Node:
Random Selector Node类似于Selector Node,当至少有一个子节点返回True,则它自己将会返回True,并结束其它所有的子节点(其它子节点返回False)。不过有区别的是,Random Selector Node会按照随机顺序运行它所有的子节点,它会打乱所有的子节点执行顺序。如果所有的子节点返回False,它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
Random Sequence Node:
Random Sequence Node类似于Sequence Node,当所有的子节点返回True,则它自己将会返回True。不过有区别的是,Random Sequence Node会按照随机顺序运行它所有的子节点,它会打乱所有的子节点执行顺序。如果有至少一个子节点返回False,那么它自己将会返回False。如果有至少一个子节点返回Running那么它自己将会返回Running。
Selector Evaluator Node:
Selector Evaluator Node是一种特殊的节点类型,它将会运行优先级最低的子节点。如果有高优先级的子节点处于Running状态,下一帧有个低优先级的子节点想要运行,则会中断高优先级的子节点任务。
----------------------------------------------------------------------------------------------------------------------