最近学习了一下行为树,关于行为树有很多好的文章,比如我看的这两篇
http://blog.csdn.net/kenkao/article/details/6099966 http://zhuanlan.zhihu.com/indiegamepixel/19891875
Git上也有很多写的很不错的项目 不得不说github真是个好地方啊…… 我收录了3个比较不错的项目,如下
http://pan.baidu.com/s/1o6RTfT4
其中behaviorTree-master架构比较清楚,很适合初学者去读,但功能不完善 BehaviorTree-U3D-master这个项目主要是声明了一些借口,并没有具体实现,但是作者写了一个很不错的编辑器 BT-Framework-2-master是伍一峰大大写的,把action节点用和fsm类似的方式实现,相对较复杂 大概流程就是依次执行各个节点,子节点要向父节点报告执行结构,然后根据节点的特性来控制树的走向 比较核心的就是这三种节点,一般用来作为树枝
* Selector Node 一个true即返回true,否则false * Sequence Node 一个false即返回false,否则返回True, * Parallel Node 并发执行它的所有Child Node。 而向Parent Node返回的值和Parallel Node所采取的具体策略相关: Parallel Selector Node: 一False则返回False,全True才返回True。 Parallel Sequence Node: 一True则返回True,全False才返回False。 Parallel Hybird Node: 指定数量的Child Node返回True或False后才决定结果。 而树叶即具体的逻辑,需要我们根据自己的需要去实现 Decorator Node,它将它的Child Node执行后返回的结果值做额外处理后,再返回给它的Parent Node。 例如取反,重复执行 Condition Node,它仅当满足Condition时返回True。 最后看Action Node,它完成具体的一次(或一个step)的行为,视需求返回值。 而当行为需要分step/Node间进行时,可引入Blackboard进行简单数据交互。 下面简单介绍下伍一峰大大的项目 Activate方法,初始化树,可以再此处获取需要用的数据的id,避免每次都去查找 clear方法,用来重置树 重置主要是确保所有action节点都成功exit 此项目在action节点中还加入状态机 用一个enum来判断是否第一次进入,是则调用enter 之后一直调用excute 父节点记录上一次执行的子node,当执行的node发生变化或当前活跃的子node返回success或failure时调用clear来exit 另外作者还用了一个enum来控制clear,我没看太懂……希望有懂得大大指导下
|