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

关于C#中Agent实例的疑问?

0 喜欢 0 不喜欢
128 浏览
C#中注册实例(Agent.RegisterInstanceName)、绑定实例(Agent.BindInstance),以及C++中注册名字(Agent::RegisterName)、创建实例(Agent::CreateInstance)、绑定实例(Agent::BindInstance)这些接口的确实作用是什么?更主要的是想弄懂面向Unity的C#中,RegisterInstanceName和BindInstance各自的作用。

目前从能找到的资料中,我所理解的是:RegisterInstanceName是用于,将一个自定义Agent在导出元信息之前注册起来,否则就算在这个自定义Agent中打上MetaInfo的标签也不会导出元信息。一般的程序,使用RegisterInstanceName注册我们自定义的Agent,再导出元信息,编辑行为树,导入行为树,执行,就可以正常执行,并不需要BindInstance参与。

但有用到静态成员和单例的时候,似乎需要用到BindInstance,但这里面的本质关系,RegisterInstanceName和BindInstance的关系和作用是什么?BindInstance是把自定义Agent类与全局绑定起来了吗?目前我感到很摸不着头脑,特此求教
最新提问 9月 29, 2016 用户: Michael (310 分)
修改于 10月 8, 2016 用户:jonygli

1个回答

1 喜欢 0 不喜欢
 
已采纳

RegisterInstanceName用于注册一个实例的名字,表示它的合法性。在元信息的导出时,会自动将注册过的实例名进行导出。

BindInstance用于将一个实例的引用和一个注册好的名字进行绑定,可以在执行游戏的过程中,根据自己的需要动态的改变这个绑定,也即可随时将某个实例名与其他实例的引用进行绑定。

如果只是调用RegisterInstanceName,而不调用BindInstance,那么指定的实例名对应的实例还是空引用,运行时如果某个节点用到了该实例,则会爆掉。

如果只是调用BindInstance,而不提前调用RegisterInstanceName,那么执行到BindInstance时,就会提示绑定不成功。

将RegisterInstanceName和BindInstance分开为两个操作,也是为了动态的绑定某个名字到任意的实例。

具体使用过程请参考:

http://www.behaviac.com/language/zh/instance/

最新回答 9月 30, 2016 用户: cainhuang (33,810 分)
采纳于 9月 30, 2016 用户:Michael
...