java 行为树_行为树 学习笔记

Success

Failure

Running

Idle

Halted

节点的运行状态有成功 , 失败 正在运行中 还没有开始运行 和 暂停

节点返回状态有 立刻返回失败和所有的子节点返回失败人后再返回失败.

立即返回成功和所有子节点都返回成功后返回成功

vim每次保存后自动去掉行末的空格 加入.vimrc 然后source 一下即可.

autocmd FileType c,cc,cpp,python,ruby,java,sh,html,javascript autocmd BufWritePre :%s/\s\+$//e

关键词

在展开之前,我们先定义几个关键词(基本都以BT作为前缀...是Behavior Tree之意,别误会了...),会在下面的框架用到。

BTNode:所有节点的base class。定义了一些节点的基本功能,并提供一些可继承的函数。

BTAction:行为节点,继承于BTNode。具体的游戏逻辑应该放在这个节点里面。

BTPrecondition:节点的准入条件,每一个BTNode都会有一个。具体的游戏逻辑判断可以继承于它。

BTPrioritySelector:Priority Selector逻辑节点,继承于BTNode。每次执行,先有序地遍历子节点,然后执行符合准入条件的第一个子结点。可以看作是根据条件来选择一个子结点的选择器。

BTSequence:Sequence逻辑节点,继承于BTNode。每次执行,有序地执行各个子结点,当一个子结点结束后才执行下一个。严格按照节点A、B、C的顺序执行,当最后的行为C结束后,BTSequence结束。

BTParallel:Parallel逻辑节点,继承于BTNode。同时执行各个子结点。每当任一子结点的准入条件失败,它就不会执行。

BTParallelFlexible:Parallel的一个变异,继承于BTNode。同时执行各个子节点。当所有子结点的准入条件都失败,它就不会执行。

BTTree:将所有节点组合起来的地方。

Database:黑板,一个存放共享数据的地方,可以看成是一个Key-Value的字典。为什么需要黑板呢?因为设计良好的行为逻辑,应该是独立的,可以在行为树的任何位置部署的。也就是说行为A和行为B并没有直接的沟通方法。黑板的作用就是作为一个行为树的“数据库”,让各个行为节点都可以储存数据进去,供感兴趣的行为节点利用。(同时,在Unity3d的语境下,Database继承MonoBehavior,可以提供各种Component给节点使用。)

UML类图:

序列(Sequence)节点:顺序执行所有子节点返回成功,如果某个子节点失败返回失败。

循环(Loop)节点:循环执行子节点到指定次数后返回成功,如果循环次数为-1,则无限循环。

条件(Condition)节点:根据条件的比较结果,返回成功或失败。

动作(Action)节点:根据动作结果返回成功,失败,或运行。

等待(Wait)节点:当指定的时间过去后返回成功。

你可能感兴趣的:(java,行为树)