Decotator(装饰)既然作为条件判定分为了三种判定类型,
第一:控制输入的类型,比如BlackBoard
第二:控制输出的类型,比如Force Success
第三:控制执行方式,比如Loop
系统中自定义了很多常用的Decotator,IsAtLocation(判断是不是在某个坐标)
ForceSuccess(强制输出成功)
CampareBBEntris(比较两个黑板Key)
Loop(循环,可以设置次数)
ConditionLoop(达成条件在进行循环)(条件通过KeyQuery设定)
Composite(混合,将两个装饰放在一起判定)(可以双击打开进行自定义设置条件)
Cooldown(冷却)(执行完成后等待时间返回失败)
Does path exsit(判断一个点到另一个点是否有导航路径)
Is BBEntry value of given Class(判断黑板Key是什么类型)
ConeCheck(判断目标点是否在圆锥体中)(伤害)
TimeLimit(时间限制)(节点中事件在规定时间内没有完成就返回失败)
ConditionalLoop(有问题)()
而且Decotator还可以自己定义,新建一个打开,使用PerformConditionCheckAI的函数进行判断并返回布尔值,来达到条件的判定。
Service
Service用于附着在Compositse,常用于更新和检查黑板。以行为树的形态取代了传统分支节点,而且可以说Service自己有自己的时间轴,一旦获得焦点就开始自己的时间,可以在Detail面板中的Service设置Intrval(间隔,休息时间)(帧之间间隔的时间)以及RandomDeviation(自由偏差)。
更新的话就是说可以将数据输入到黑板上的过程可以写在这里
(比较能体现行为树与状态机的区别)
Simple Parallel
支线与主线的区别有两点
1.Imm跟Delay的区别
Imm跟Delay的区别就是,前者将在主线Finish后迅速abort支线,返回上一级,而Delay就会等待直线任务结束再返回,但是记住不管那种情况都要Finish,假如说主线Finish后打断了支线,那么此时支线是被abort的,其中要有abort事件来Finishabort。
返回必须要两者都Finish的,不然将会陷在某个地方。
2.并行节点返回的成功与否是由MainTask决定的,这是无可厚非的。MainTask成功,则Simple Parallel是成功的,反之亦然。
3.这里有一点要注意,虽然是并行,但是还是有顺序的,只是差值很小,跟蓝图中的Sequence一样,主节点还是有一点优先时间的,例子就是,在主任务的Begin后添加一个Finish,那么就会出现支线不会执行,说法是主线一开始就结束,支线还没有开始就被主线返回了。
4.还有一种情况是,如果支线完成了,此时主线还没完成,那么支线会重新执行,直到主线也完成。
5.不过事件的执行一般很少有在过程中的事件(例如Delay),如果以帧为单位调用事件的话,就不会存在打断情况。
命名:事件是动词加名词,条件(装饰)命名为IsXXXXX