• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱
欢迎来到 behaviac Q&A。 您在bbs里的问题,管理员会当下就收到通知,不要担心管理员看不到您的问题。也请在bbs里提供您的email,这样就可以第一时间收到关于回答,评论的email的通知了。 为了节省大家的时间,请表达好你的问题,提供必要上下文,版本号,平台信息,重现步骤等。

一个Agent能btload多棵树吗

0 喜欢 0 不喜欢
175 浏览
我有个需求是给一个对象绑定许多行为树(比如NPC需要PatrolTree,HealthTree等),

问题是:

1.同一个Agent能拥有多颗树吗?那我可以在一个Agent上btload多棵树,而且让两个能同时工作?还是一个Agent只能btload一棵树:切换,需要btunload(currtree), btload(newtree), btsetcurrent(newtree),才能切换。

2.如果问题1答案一个Agent同时只能拥有一棵树。那我的需求采用什么样的逻辑更好。我这里想到的两种方式如下,采两种方式是否可行?可行的话哪种更优?是否还可以采用其他更好的方式?

 ①把Npc独立出来,不继承Agent,PatrolTree,HealthTree继承Agent,PatrolTree调用        btload(patroltree),HealthTree调用btload(healthtree),这些树都属于NPC成员。

 ②NPC还继承Agent,把PatrolTree,HealthTree等合在一起做一个大的树(BigTree)来工作,NPC

 只btload(bigtree)就可以。
最新提问 8月 18, 2016 用户: bos_bison (300 分)
标签修改 8月 18, 2016 用户:jonygli

1个回答

0 喜欢 0 不喜欢
一般的模式是在初试化的时候加载需要的行为树(加载是个相对慢的操作)。

然后通过btsetcurrent设置当前active的行为树,active的行为树只能是一个。

如果需要A,B同时工作,可以把A,B作为主树M的并行节点的子节点,active的行为树是M。

一般不需要btunload。

可以使用并行节点管理多个行为树。也可以通过序列或选择等节点,结合前置或条件节点等把多个子树组织到一个行为树里。
最新回答 8月 18, 2016 用户: jonygli (57,510 分)
jonygli你好,关于这个话题,我想问下在我们现在的项目中,如何做好架构使得行为树的性能最优

我们现在行为树工程是用于控制单位移动和攻击

基础的设想是一个单位,拥有不定数量的武器(1个或者多个,预先生成,不会动态变化),武器都是可以自动独立开火,移动由玩家控制,但是:

1.武器开火逻辑又要依附于单位自身的一些状态,比如有些单位的武器,必须在架设之后,才能攻击。

2.单位的移动与否,也要获取武器是否开火的状态来判定。比如有类似A地板的命令,一旦单位身上的远程武器准备开火,则会停下行动。

目前把单位当做一个agent,跑一颗行为树,每个武器也当做一个agent,跑武器的行为树,按照你们回复的说法,性能应该不是最优的吧?那如何整到一棵树上呢?
“目前把单位当做一个agent,跑一颗行为树,每个武器也当做一个agent,跑武器的行为树,按照你们回复的说法,性能应该不是最优的吧?”

性能是否是最优的不好说。这种做法也是可行的。

 

“那如何整到一棵树上呢?”

如果想整成一个树,则需要通过weapon1,weapon2两个成员来访问该成员的属性及方法,也是可行的。
...