AI行为树关键字分析

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

posted @ 2017-07-10 20:49  祥A  阅读(584)  评论(0编辑  收藏  举报