通过对Behavior Designer 的学习,我们来实现一个小例子,NPC在巡逻,玩家在走动,如果在走动的过程中遇到NPC,则会追随NPC
NPC的Tree:
如上可以看到Speed是巡逻的速度,Angular Speed 是旋转的速度,Arrive Distance 是距离目标点0.1米就认为已经达到目标点,Waypoints是GameObject,就是两个巡逻的点
Player:
先解释Sequence中的Abort type(有条件的异常终止) :
这是官网文档的链接:http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=89
Lower Priority:上图就是应用了Lower Priority :当当前分支右侧任何任务处于活动状态时,将重新评估。
如上图所示,Sequence和右边的Seek比较,首先的Sequence是不满足不能执行的,因为还不能看到物体,所以先执行Seek
,但是Sequence一直在判定是否满足执行条件。然后随着Seek的执行。执行到这一步
Sequence满足执行条件了,于是打断Seek执行,开始执行Sequence,Player跟随NPC。
Self:将在当前分支中的任何任务处于活动状态时重新评估。
我们把Sequence改为Self
会发现
player并不会跟随NPC,这也是很正常的,Self只能中断其自身,意思是在Sequence下,当右边的Seek运行时,会一直判定
Can See Object 如果满足Can See Object,会中断右边的Seek ,执行左边的Can See Object。
Both:将在右侧或当前分支内的任何任务处于活动状态时重新评估:
他会先执行Seek,当看到物体时同样会打断Seek,执行左边的Sequence下的节点,而Sequence下的Seek执行时,同时还会一直判定Can See Object,当Can See Object不满足条件时,Sequence返回false,执行右边的Seek。
当NPC消失在player的视野外,会这样:
Conditional Aborts就介绍到这里了,下面还要提一提Variables。
Variables的官方文档:http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=50
定义一个全局变量之类的,可以通过小圆点绑定这个变量
如图,可以用来传递和绑定变量