现有的几个Unity热更新方案该如何选择,各自的优缺点是什么?
uLua、C#Light、Dll 目前可以选择的有lua,还有l#,以及我后来重新设计的ILRuntimelua的话比较适合由c++ + lua转过来的团队,如果本来团队就习惯lua开发的话,可以尝试使用uLua等lua的unity插件来进行逻辑开发,然后后期再更新
对于一开始就使用c#的团队来说,如果想像在unity里一样得进行开发的话,可以尝试使用一下我设计的一个库,现在已经开源。原理上跟L#差不多,不过性能上要优于L#不少,并且完全支持泛型和继承脚本外的类这些l#做不到的用法,感兴趣的话可以看我的github repo:https://github.com/liiir1985/ILRuntime
如果喜欢的话希望能给个星 目前正好在做这方面的调研,简单说一下目前掌握的情况,抛砖引玉
- uLua 跟另外两个方案比运行效率没有优势
- C#Light 不支持泛型,委托事件需要用特殊的方式封装,详见 CSLight研究院之学习笔记脚本NGUI里的回调方法(二)
- Dll iOS上貌似没办法动态载入,有了解的请指教
之后实际项目有积累以后再回来更新 推荐slua 我决定下个项目不支持热更新了,组件的开发方式,好好设计的话,能排列组合出不少功能。
当前项目用的nlua(https://github.com/dpull/UnityLua),开发速度慢于c#,也不好调试 我们之前的项目用的是slua,顺利上线了,没有遇到什么大的问题。
C#Light我们也研究过,在效率上相比lua并没有很大的优势,用起来感觉还是有不少坑要趟;DLL热更新iOS上没法用,不考虑。
加上我们之前做过cocos2dx+lua,对lua更了解,所以最后决定用slua
说一下优缺点吧:
1、debug的确麻烦一些,但是有个好处就是不用等编译,你也知道代码多了之后Unity的那个编译速度有多慢,改完lua代码直接启动就可以跑,再开发一下甚至可以在运行时直接reload代码,开发效率还可以
2、对程序员的技能要求低。只要lua跟C#、Unity交互的部分做好了,大家都只用在lua层面开发,与C#相比lua用起来还是简单很多的
3、调试方便,真机运行时遇到lua的crash,可以直接拿到traceback显示出来,方便及时发现问题。不过在线上的话还是要做好crash report。
4、动更方便,后来我们游戏里的配置都直接转成lua的table,require之后就直接用了,也没有反序列化的效率问题,每次动更配置+代码也就几k,工具做好了之后修复bug什么的很方便
5、性能问题,其实在我们项目中并没有感觉到lua对性能用什么影响= =
不过这个问题现在应该已经有标准答案了,毕竟鹅厂的xlua都开源了,那么多项目都用,已经不用选了啊 不说ios的情况,我觉得android的热更新涉及到bundle的制作都挺麻烦。 dll在android上还可以搞搞,ios应该是不可能实现。
C#Light是不是没有什么成功的大案例,感觉太小众,而且是不是语法上还有不少限制?
我反而觉得ulua可能是更为靠谱的方法。
//不过,话说回来,cocos-3d的js脚本方案有没有考虑过?好像是可以热更新,不过3d制作工艺比unity3d确实是差好多。。。
页:
[1]