|
我也来说两句吧,其实我就是你说的那种人.
我最早在一家公司就用过一个月的unity,也没怎么熟悉,就知道一些基本操作和基本思想.
后来就去了另外一家,没有unity,所以就全是自己用c++手动写,从opengl的shader开始,一步一步往上搭,最终封装到顶层逻辑使用,也并没有什么不妥的地方,只是底层架构不算太好,渲染管线管理不好,添加一些基础功能时总是觉得找不到合适的位置,总之就是一开始就没有想好应该怎么去管理这些底层架构,虽然无论底层怎么改,上层也不用关心,反正就使用一些暴露出来的接口,只要接口不变,其他什么都不用改.
后来因为特效方面C++没有比较好的库来实现,公司就决定就转向unity开发.
所以就把底层代码去掉,接上unity的逻辑,然后上层架构也不用改,大部分结构也不用动,只需要unity提供一个update接口就可以.
所以就这样慢慢成型,到现在我也很少用unity的组件,经常看到其他人用一些什么组件做功能,我都好奇,你这到底是哪儿来的组件,怎么知道的这些组件.
我现在项目里很少有MonoBebaviour,有几个也是我用于面板显示调试信息用的.也有其他人写的MonoBehaviour,只是我觉得根本没什么必要,除了Start,Update,跟普通c#类没有任何区别.
这些的好处是什么.
1.代码风格统一.
2.能够100%掌控所有代码.不需要依赖于引擎的回调.
3.因为所有代码都是自己写的,所以需要实现功能时,不需要考虑有什么组件或者插件可以实现,而是专注于功能本身,去探究功能的本质.所以只要是做过的功能,从底层到表现细节都能够很好的掌握,印象也很深.
4.因为不依赖与MonoBehaviour的反射调用,所以任何地方打断点都能够看到完整的堆栈.查找bug更容易.
5.逻辑全部都集中在代码中,如果出现任何问题,只需要查找代码,而不需要去找那个物体上面的什么组件有没有添加或者启用.
6.代码全部都是自己的,所以有任何问题或者有任何的需求都可以随时添加.如果使用的其他插件或者unity内置的,则可能出现某些不满足功能,但是却无法修改,只能用一些歪门邪道进行处理.
等等的还有很多....
坏处嘛.
最大的坏处就是可视化功能弱化了,其实也影响不大,也可以像我一样添加一些用于显示调试信息的脚本,这些脚本也就只在编辑器环境下才会用到.
现在在我眼中,unity就是一个渲染引擎,最多还是一个物理引擎,至于项目代码结构,跟unity完全解耦最好.自己有了独立完善的代码结构,其实想要更换依赖的外部模块的时候也会很快.比如上个月我就把我项目从NGUI换成了UGUI,代码改动很小,预设上面的组件从Sprite换成Image,Texture换成RawImage,Label换成Text.大部分时间都消耗在了图集上.因为散图有几十万张....
其实我下个项目准备换成虚幻,代码整体结构基本也不用动,就只是把C#重新用C++写一遍.因为本身C#代码最初也是从C++重新写的,所以转换也不会花太多时间,改改数据类型,编译通过就好了,然后再测试测试.
即便换成虚幻我也只是使用虚幻提供一个更新接口,然后接入我的代码进行更新.也只是把虚幻当成一个渲染引擎和物理引擎.
unity也好,虚幻也好,cocos也好,都是只一个工具,也不要太依赖了,不然真的很难跳出来. |
|