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

behaviac 能否方便支持 lua,并且支持lua热更呢?

0 喜欢 0 不喜欢
373 浏览
我在unity中使用了lua脚本做战斗逻辑,如果使用behaviac的话,我认为lua的角色增加或修改函数方法的话,需要修改c++的agent方法。如此一来客户端就不能热更新了,有没有其他的做法呢?王者荣耀应该也用了lua吧?知道他是如何使用behaviac的吗?
最新提问 5月 26, 2016 用户: speedeny (120 分)

1个回答

0 喜欢 0 不喜欢
直接支持lua的计划暂停了,短期内不会重启,也就是说短期内不会直接支持lua。

当然了使用者可以直接通过某个动作节点调用lua源码,这是没有问题的,也不需要额外工作。

我们正在做的一个马上就要发布的feature是GC free的。

不需要使用lua,直接使用behaviac的节点。使用xml或bson的导出格式,就能支持热更新。
最新回答 5月 26, 2016 用户: jonygli (58,290 分)
修改于 5月 26, 2016 用户:jonygli
我是前天才了解到这个不错的behaviac的,还不是特别熟悉,再问几个问题好吧。

1.agent我是不是可以理解就是我希望执行这个行为树的实体对象,比如角色,队伍等。

2.那如果我的角色使用lua实现的,并且有一个移动的方法(当然也是lua)。我应该如何写我的agent呢?如果是希望暴露给behavaic的方法都写成单独的函数方法的话,手机端更新战斗逻辑behaviac做为c++库肯定是更新不了的。如果是写成同一个的方法,传的参数其实是函数名以及参数的话,编辑器这边就非常不直观,有没有好的解决方案?

3.我看例子的时候action这块儿我有一个疑问,比如移动和攻击都是不能当即返回结果的,我希望移动到某个位置才攻击,该怎么实现,写一个checkresult每帧检查么?

4.之前用状态机做ai的时候有一些昏迷定身等状态,现在用行为树做的话,是需要加这种状态时先修改角色身上的一个属性,设置为昏迷状态,然后每帧走行为树,去做一个action么?这个action返回非running的条件是角色身上的昏迷状态取消?

我的有些问题可能比较初级,有时间的话请指点一下,谢谢啦


1.agent我是不是可以理解就是我希望执行这个行为树的实体对象,比如角色,队伍等。

是的

2.那如果我的角色使用lua实现的,并且有一个移动的方法(当然也是lua)。我应该如何写我的agent呢?如果是希望暴露给behavaic的方法都写成单独的函数方法的话,手机端更新战斗逻辑behaviac做为c++库肯定是更新不了的。如果是写成同一个的方法,传的参数其实是函数名以及参数的话,编辑器这边就非常不直观,有没有好的解决方案?

我们假设你的Agent是用C++或者C#实现的。如果是lua实现的话,可以通过提供一个函数(c++),在动作节点里指定这个函数(这个函数可以接受一个lua脚本的参数),从而调用lua脚本。

关于热更新,behaviac也是完全胜任热更新的。

既然使用了behaviac,就没必要再用lua包一层了,可以直接用c++或c#实现,然后在节点里使用c++或c#的实现。

当然了,关于热更新,你如果需要修改C++或c#是不可以的。本质上behaviac的节点和你用lua写的脚本是一样的。只是behaviac是图形的形式,某种意义上更直观些。但你如果觉着lua更方便,那还是不要使用behaviac了

3.我看例子的时候action这块儿我有一个疑问,比如移动和攻击都是不能当即返回结果的,我希望移动到某个位置才攻击,该怎么实现,写一个checkresult每帧检查么?

这个有很多种方法可以实现。提供一个方法检查返回值也是可以的。也可以通过序列节点先实现移动,然后攻击。非常直观。

4.之前用状态机做ai的时候有一些昏迷定身等状态,现在用行为树做的话,是需要加这种状态时先修改角色身上的一个属性,设置为昏迷状态,然后每帧走行为树,去做一个action么?这个action返回非running的条件是角色身上的昏迷状态取消?

首先behaviac也支持FSM。但是一般情况下,BT完全可以实现同样的功能,但是会更直观和清晰。具体的做法需要你首先了解下BT。

 

...