【U3D】Behavior Designer中的复合节点(Composites Node)
来源:互联网 发布:济南java程序员工资 编辑:程序博客网 时间:2024/05/27 20:22
本系列文章由CSDN@萌萌的一天 出品,未经博主允许不得转载。
一: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状态,下一帧有个低优先级的子节点想要运行,则会中断高优先级的子节点任务。
----------------------------------------------------------------------------------------------------------------------
二:Composites Node中的Abort Type
Abort Type,即中止(打断)类型,是复合节点上自带的属性,我们可以在Inspector面板上对它进行设置。
其中包含了四种类型:None、Self、Lower Priority、Both。
None:
表示不会进行任何中止操作,是默认的中止类型。此状态下行为树不会产生任何中断方法,会按照顺序依次对节点进行运行操作。
Lower Priority:
Lower Priority表示低优先级子节点的中断操作。当一个Composites Node的Abort Type设置为Lower Priority,那么当此复合节点不处于Running状态并且它的低优先级同级节点处于Running状态时,会每帧对此Composites Node的子状态条件进行检查,如果子状态条件检查成功,会打断其它的任务,优先运行此Composites Node的子节点。以下是以一个简单的例子进行说明:
该例子是判断一个物体是否看见玩家,如果看见则进行追击操作,追击成功后会原地进行等待。现在我们给Sequence 的Abort Type添加Low Priority类型。可以看见,Sequence图标左上方会有个向右的箭头,即表示比它优先级低的同级任务。
现在我们运行此行为树观察一下它的状态:
由于开始时此物体并没有看到玩家,所以“Can See Object”返回为False,根据Sequence节点的特性它自己也会返回False,从而执行“Wait”方法。然而由于Sequence节点是Low Priority类型,会每帧对Sequence的子节点状态,即“Can See Object”进行检查(“Can See Object”上有个红色圈带X的标记即表示每帧对它进行检查),只要当某帧物体看到玩家后,"Can See Object”条件判断成功,就会打断其它任务的运行,执行之后的追击方法,如下图:
Self:
Self表示我对自身的子节点进行中断操作,当一个Composites Node的Abort Type设置为Self,那么当此复合节点不处于Running状态并且它的低优先级同级节点处于Running状态时,会每帧对此Composites Node的子节点状态条件进行检查,如果子状态条件检查成功,会打断其它的任务,优先运行此Composites Node的子节点。然而如果运行子节点时,Composites Node的子节点状态判断失败,则会打断它自身的运行。
还是以上述例子为例,当物体对玩家进行追击时,一旦物体看不到玩家了,即"Can See Object”条件判断失败,则会打断追击方法的执行,从而中止Sequence。
Both:
Both是代表同时存在Self和Low Priority打断类型,判断方式会更加灵活。
0 0
- 【U3D】Behavior Designer中的复合节点(Composites Node)
- 【U3D】初识Behavior Designer行为树(一)
- [Unity插件]Behavior Designer:节点
- Unity+Behavior Tree行为树 Behavior Designer 任务条件节点(五)
- Behavior Desig 中Composites 简介
- Behavior Designer中节点类型分析
- [Unity插件]Behavior Designer:自定义Conditional节点
- Behavior Designer中节点类型分析
- Behavior Designer中节点类型分析
- 手动写一个Behavior Designer任务节点
- 手动写一个Behavior Designer任务节点
- Behavior Designer教程(AI)
- Unity中的行为树插件:Behavior Designer
- Unity中的行为树插件 Behavior Designer
- Behavior Designer
- Behavior Designer
- JavaScript中的Node(节点)
- 关于行为树插件Behavior Designer的学习(二)_Composites复合任务
- 连接不上数据库sql server
- C++课堂实验5
- BRISK特征提取算法
- PowerDesigner中的设置单个实体图标显示样式
- spring 通用异常处理,ajax异常返回json
- 【U3D】Behavior Designer中的复合节点(Composites Node)
- time
- VR/AR工作原理、目前存在的技术问题
- 天气预报插件
- Audio Focus机制以及AudioManager的使用
- textwrap提供了一些方法
- Android Studio技巧合集
- calendar
- python3.5连接 mysql