查看: 942|回复: 0
打印 上一主题 下一主题

[其他] 行为树学习笔记(转载)

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2016-1-15 03:04:29 |只看该作者 |倒序浏览

最近学习了一下行为树,关于行为树有很多好的文章,比如我看的这两篇

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,我没看太懂……希望有懂得大大指导下

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-18 02:32 , Processed in 0.135333 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部