【热更新】C#反射和Lua

1.前言

        前几天某知名工作室在旁边某知名大学现场招聘实习生,怀着一丝忐忑请了一天假,拉了3个小伙伴(3个都是策划( ・´ω`・ ))跑去试试。宣讲会现场,旁边坐满了985的学霸,当时就怂了,最后想着反正都是来送人头的就硬着头皮递了简历......

        半个多小时的宣讲会结束后,出了教室等待面试通知。等的时候听见旁边学霸说技术岗是要筛简历的(;д;),最终只会面几个人....

        简历幸运的过了筛选,面试有2个面试官,都是来自xxxxx项目组,这里就不多说面试过程了,面试中就被问到了热更新,热更新在面试中感觉是必问的,之前的面试也都有被问到过,所以来写篇文章记录一下(。・ω・。)

2.C#反射

       实现手游热更新的一个方案就是使用c#的反射机制,我所在的项目组目前代码里就是使用的反射来进行热更新。

那么,什么是反射?

 简单来说,反射就是是一种能够动态加载和调用程序集(dll)中类方法属性的机制。

     上面的解释根据自己理解瞎编的,也不知道对不对,错了的话欢迎指正。

      C#是一门编译型语言,修改源代码需要对代码进行重新编译,而手机不支持代码编译,需要在电脑上用编译器进行编译,所以导致了每修改一次代码就得回炉编译再发布新版本。使用反射后我们就只需要将当前版本的dll文件用新编译好的dll文件替换掉,这样就避免了代码的重编译而实现热更新。

       不过c#反射只适用于Android热更新,iOS因为自身的安全机制,新申请的内存空间(用于修改后的代码使用)不允许进行写操作,所以目前c#的反射基本不被商业项目用作热更新(除我们公司外(T▽T),ios只能老老实实提新包,感觉技术还停留在几年前,无力吐槽...)。

      而目前使用的最多的用作热更新的就是下面要介绍的Lua了。

3.Lua之xLua

      Lua是一门脚本语言,之所以使用lua作为热更新的首选方案就是因为lua的解释器能够使绕过App Store的代码审核机制。为了使lua更适合于热更新,目前有几个基于lua实现的脚本插件被普遍使用,比如toLua,xLua,sLua ...等等。

      这里就简单介绍一下xlua的使用

 xlua由腾讯在GitHub开源维护: https://github.com/Tencent/xLua

     之所以选择学习xlua也是因为目前腾讯的手游基本使用xlua作热更新,而作为一名游戏开发小白,自然对鹅厂有向往.....

     算了,xlua的热更新使用示例和环境配置下次再写(其实GitHub上的文档写的很清楚了),之前写的lua代码都在公司电脑上忘了上传git,寝室电脑也没备份,放假人懒也不想重新写一遍代码。。。。

    【热更新】C#反射和Lua_第1张图片

      

你可能感兴趣的:(HotFix)