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

请问Agent继承自MonoBehaviour的初衷是什么?

1 喜欢 0 不喜欢
296 浏览
(题外话:首先,很高兴最新版本解决了热加载的问题)

最近在一边研究behaviac一边做项目,很好奇Agent为什么非得要继承自MonoBehaviour,这样自己编写的类如果继承自Agent(后面称AgentChild,继承自Agent),也就继承自MonoBehaviour

Unity要求继承自MonoBehaviour的类都得是一个可视化的组件(即Unity编辑器可控的),这样自己写的继承自Agent的子类AgentChild也就必须是一个可视化的Unity组件节点

 

那么问题来了:通常我们的行为树应该是执行逻辑的,也就是AgentChild应该是只负责逻辑执行的,在MVC中属于C层,可又得是可视化的组件(即View层),显然这样做就将VC层融合在一起了,违背了MVC的初衷(M,V,C分离)

 

这也是我最近在做项目时遇到的问题,我的Agent子类必须是Unity编辑器上可视组件节点,却不能是一般的C#逻辑类

不知你们当时架构时,考虑让Agent继承自MonoBehaviour的初衷是什么,这样做貌似不太迎合MVC的模式,求指导!谢谢
最新提问 7月 11, 2016 用户: bluecoder (450 分)
标签修改 8月 2, 2016 用户:jonygli

3 个回答

2 喜欢 0 不喜欢
 
已采纳
很好的问题,感谢反馈。确实,Agent并非必须从MonoBehavior继承。

Agent继承自MonoBehavior主要的原因是想利用unity的脚本框架,好方便上手些。
最新回答 7月 11, 2016 用户: jonygli (57,510 分)
采纳于 8月 1, 2016 用户:bluecoder
ok,我想尝试着改一下behaviac的框架源码,让Agent不继承自MonoBehaviour,不知这个方案可行否?改动多吗?还请指教,多谢
我也尝试改动过,就加了一个基类,加上一个name属性
今天下午改了一下,确实很简单,没我想的那么复杂~
从跨平台移植,Agent不应该继承MonoBehaviour。

从性能的角度来说,Agent也不应该继承MonoBehaviour。

上百个继承MonoBehaviour的对象的性能会很差。

Agent应该是存储数据的地方。

Agent的行为是通过外部行为树来控制。
0 喜欢 0 不喜欢
如果C#实现非继承MonoBehaviour的agent,可以参考C++的实现思路。
最新回答 7月 11, 2016 用户: quinnpan (12,640 分)
多谢,已经改好了~
0 喜欢 0 不喜欢

版本3.5.14已经支持不从MonoBehaviour继承了。

http://www.behaviac.com/language/zh/downloads/#3514_2016-09-20

最新回答 9月 20, 2016 用户: jonygli (57,510 分)
...