• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱

求问使用行为树开发的规范流程

0 喜欢 0 不喜欢
253 浏览

基本情况:编辑器版本3.5.6,所开发的是网游,策划,客户端,服务器三方都会使用到行为树

按照我们的基本理解,规范的流程步骤是

1.策划先使用行为树编辑器,对先对自定义类和方法,成员进行定义(*号)

2.通过编辑器进行导出,将自定义的数据生成为框架代码

3.程序以2步骤的代码为基础,生成原信息,在原信息里有自定义的类

4.策划再去编写具体的行为树

但实践中遇到如下问题使得这个流程感觉不对

问题1:自定义的类型在其没在原信息导出,作为成员或者参数的类型时,会报错defaultvalue-not-registered,导出时无效,以下是一个类似的问题,但我看了回复并没有确定说明这个是否是bug,而且这么多版本过去了,这个问题依然存在

http://bbs.behaviac.com/index.php/625/b%E9%83%BD%E6%98%AFagent%E5%AD%90%E7%B1%BB%EF%BC%8Cb%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%B1%9E%E6%80%A7%EF%BC%8C%E7%B1%BB%E5%9E%8B%E6%98%AFa-%E5%88%99%E6%8A%A5%E9%94%99defaultvalue-not-registered

因为这个问题,我们现在步骤变成了

1.策划先使用行为树编辑器,对先对自定义类和方法,成员进行定义(*号)(此时对于自定义的类型变量先不定义)

2.通过编辑器进行导出,将自定义的数据生成为框架代码

3.程序以2步骤的代码为基础,生成原信息,在原信息里有自定义的类

4.策划再使用行为树编辑器,定义 自定义的类型变量 以及 参数内含自定义类型的方法,再导出

5.程序将4生成的代码添加进原来的文件里,再生成原信息

6.策划再去编写具体的行为树

问题2:程序端有客户端,服务器两端,原信息的生成到底以谁为准?如果仅以一方的导出为准,那对另一方是要手动改实现使其一致吗?

 

问题3:一些类似于UnityEngine::Vector3这样的特殊变量,如何保证服务器和客户端都能用?封装一下?

 

问题4:把原信息生成后,即让编辑器认为该类已经实现,编辑器就无法生成框架代码了,哪怕是在该类有了新增加了大量方法,这样在客户端服务器非同步开发的时候,就很尴尬了,比如我们就是先希望在客户端先验证行为树的最终效果后,再让服务器介入,此时想让服务器介入的时候已经无法生成框架代码,用了一些非常规的手段后(比如重建成员,方法一模一样的类,只是名字不一样,导出后再改名字)也不行,这下我们已经不知道到底是因为哪处导致的

最新提问 8月 12, 2016 用户: qq_5710b3d0791e7 (950 分)

2 个回答

0 喜欢 0 不喜欢
目前比较成熟的开发流程更偏重在游戏端写代码来提供类、成员方法和成员属性、以及类的实例名、各种枚举和结构体类型,然后导出元信息文件给编辑器用,编辑器这边用的较多的是用来创建自定义的属性或变量、任务。

因为方法在编辑器定义出来只是个占位符给行为树的编辑用,无法编写方法内的代码,这些方法的代码还需要在游戏端来编写。所以现阶段比较稳妥的方式,还是策划提供一个方法列表,供程序员实现。

现在的判断依据是如果某个类已经在游戏端实现了,编辑器再扩展这个类,给它新加成员方法,就不会生成该类的源文件了。所以这种情况,会造成在编辑器中新加的方法,导不出来。结合你的反馈,后续我们会改进下支持在编辑器随意添加方法,然后导出或扩展源码文件。
最新回答 8月 12, 2016 用户: cainhuang (33,810 分)
那对于既有客户端,又有服务器开发的情况,岂不是两者先要商量好了才能进展?
你如果要共享行为树,就要要求元信息是一致的。

比如,如果客户端先做了修改,服务器端的版本打开的时候就会报错,需要服务器端做出相应的修改保持一致。
0 喜欢 0 不喜欢
问题3:一些类似于UnityEngine::Vector3这样的特殊变量,如何保证服务器和客户端都能用?封装一下?

这个需要服务器和客户端都写一遍了
最新回答 8月 12, 2016 用户: cainhuang (33,810 分)
求问问题2中的情况如何处理?
defaultvalue-not-registered还存在吗?存在的话,可以提供详细重现步骤描述等以及workspace,我们保证可以fix掉。

针对问题2,生成的元信息将是一致的。我们的unittest就是这样,c++和C#的unittest共享同样的行为树的。c++和c#是两个workspace,但是源路径是相同的。导出路径不同。

defaultvalue-not-registered这个问题很好重现啊,只要像下面这样随便建一个工程,然后先建立一个新类,在这个新类里面建立一个变量,类型就是这个新类,立马报这个错误,100%重现,3.5.9

image

好的,我试下。晚些时候或明天反馈你

已fix,请下载最新版本3.5.10:http://www.behaviac.com/language/zh/downloads/

有任何问题都请及时反馈。

你好,我用的是3.5.10

在我创建新的method和property之后,导出元信息时,报错,截图如下

image

谢谢。

请把你的workspace打包发给我,排查下。
fix已上传,请clone或pull最新版本(3.5.11)

btw,只是源码上传了,编辑器需要你自己编译。。。。
好的,多谢回复。
...