behaviac icon indicating copy to clipboard operation
behaviac copied to clipboard

关于behaviac节点复用的疑问

Open rooong opened this issue 7 years ago • 3 comments

behaviac是否支持自定义节点?譬如说,我想加一个动作节点,它的功能不是当前树对应类型的成员函数,而是另外的一个类型支持的功能(目前看好像只能通过子树的概念实现)

因为这个涉及到节点的复用,如果一个动作节点定义好了,它在任意的一棵树上,可以随时被创建调用。 目前看使用子树的概念可以达到类似的效果,但是本身概念上感觉被复杂化了,我的理解,动作节点就只做动作行为,条件节点就只做条件行为(这里说的是原子化的动作节点和条件节点),而子树,本身是树,它是一系列节点的组合,当它只做一个节点的事情的时候,它的效果是相当于原子节点,但是毕竟变复杂了。

rooong avatar Apr 22 '18 02:04 rooong

一个类型调用另外一个类型的功能? 感觉不太支持,子树也不能支持吧?(不知道新版本改了没。)

我们目前遇到这种情况: 方案1. 注册一个全局实例,参考:http://www.behaviac.com/tutorial_3_agent_instance/ 方案2. 行为树这边只维护一个类型 比如叫 ObjAgent, 所有怪物、npc、角色用到的AI接口都在这里实现,具体实现逻辑根据类型不同实现(有些接口逻辑是一样的。)。 具体实例化对象时,怪物、npc、角色类里面创建一个ObjAgent对象,赋给它不同的行为树,然后run里定时调用 objAgent的exec()

zhenmu avatar Apr 28 '18 10:04 zhenmu

@zhenmu 大概就只能这么处理了

rooong avatar May 08 '18 09:05 rooong

Agent可以添加自定义类型成员,可以调用成员的接口。效果和自定义节点是一样的。

kecookier avatar May 10 '18 03:05 kecookier