原回答有疏漏之处,此处再次补充~
题主所问,其直接解答有2点:
一是为了保持内核独立,解耦引擎,为了未来的移植其他引擎做准备
二是为了保障性能,由于Unity的MonoBehavior底层机制原因,会有较大性能消耗(相对)
——————————
第一点,对内核独立而言,我是保持讨论态度的。
以前游戏引擎不成熟,写游戏用的DX接口、OP接口是很难看的,它们的API基本没多少相同,甚至渲染流水线到现在都不一样,一个新手很容易就写出高耦合的游戏,它的移植性能基本为0。因此很多教学书、教师都会很强调解耦代码。即使到了游戏引擎走向成熟,注重跨平台的现在,商业游戏解耦游戏引擎依然是主流。
(尤其是Unity当您开始用Lua的时候,没有解耦过的代码添加Lua功能真是个灾难)
从这一点上,我是相当赞同使用单纯的脚本实现功能的。
不过对独立开发者来说,解耦引擎毫无必要。因为“解耦”并不是独立开发者当下最紧迫的任务,产品才是最最重要的任务。深有体会。
第二点,是资源的问题。
Unity的MB机制会导致它的调用比内部调用慢一些,在优化角度来看用单纯的脚本实现功能是有必要的。
开发手机游戏的话,它是正确的,因为手机资源抓襟见肘。
开发网游服务端也是对的,要尽可能压榨服务器性能。
那么问题来了,追求极限性能为什么要用Unity?!
如果想要性能,开发安卓就应该从cocos或者直接从Activity搞起,开发服务器端直接就是Linux+c++。要性能,极限压榨,是个不错的想法。
但是如果你要用Unity,就该放手写脚本(当然蹩脚程序一个obj挂几十个compent的当我没说过),千万不要患上性能强迫症去花大把时间构造性能强大结构复杂的脚本。通常,一个游戏(Unity开发桌面程序或者动画同理)流畅与否取决于画面渲染,而不是脚本。脚本制作只要记住一点,只优化大量循环的代码就行了。经典的代码例如角色控制器,AI等。其他代码尽可能简洁。非游戏开发一般是不需要考虑这么多的,测试的时候注意有没有特别卡的地方就好了。除非客户或者上司特别强调性能,不然花点时间去调下画面明显更加合算。
总结,继承MonoBehaviour是有很多好处的,调试方便,思维顺畅,这些都是可以大大加快开发进程的。当然弊端也有不少,因此既不能强行脱离MonoBehaviour去开发游戏,也不能全部逻辑依赖MonoBehaviour,个中的拿捏程度,就看各位未来的开发需求了。