开发者社区
?本文主要使用微软提供的一套C#的API函数,通过这些API函数,可以对已经编译过的.Net体系生成的EXE,DLL文件进行修改,而不是修改源码编译的方式,来完成新功能的加入、或者原有功能的修改。这个方式可以应用于修改没有源码DLL或EXE文件、批量修改或插入代码功能到DLL或EXE文件中。背景介绍 unity3d在苹果上的热更新,一直是业界热烈讨论的话题。我所在的项目正在考虑使用LUA作为热更新的实现方式。于是在这种情况下,HotFix实现的热更方式成为我们的一个选项。处于个人的好奇心,阅读的Hot
本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的第一步:通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步:生成函数连接器来连接LUA脚本与C#函数。第三步:在C#脚本编译结束后,使用Mono提供的一套C#的API函数,对已经编译过的.Net体系生成的DLL文件进行修改。第四步,通过LUA脚本修改C#带有标签的类中静态变量,把代码的执行路径修改到LUA脚本中。通过这套方案可以实现对已经标识的C#代码进行动态更新。基础准备 知识准备 CIL: 通用中
各位朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com。虽然Unity3D引擎依靠强大的跨平台能力睥睨高手林立的游戏引擎世界,我们在使用Unity3D游戏引擎的时候基本上不会去接触底层的东西,可是有时候面对某些奇葩的要求的时候,我们就不得不考虑使用C++这样的语言来为其编写相关的插件。你如果问我是什么样的奇葩要求,比如接入蓝牙手柄来控制游戏、接入类似街机的设备来控制游戏、接入同一个游戏到两个不同的设备上并响应不同的控制……诸如此类的种种问题,可能目前在
问题来源于某次对游戏中某性能热点的分析。我们发现在游戏中第一次做某些操作时,会有较大的一个顿卡,直觉告诉我们这里可能有资源的加载。可是一一展开Profiler堆栈,发现并没有任何Load相关的函数。好吧,于是进一步对函数体插桩进行分析,最终定位到的一些函数实现都非常的简单,不应该会产生这么大的事件消耗。无奈之下,观察了第二次做同样操作的profiler数据,发现同一个函数实现(注意,无资源加载),在第一次和第二次的时间消耗上有很大的差别。这与我们的常识不符合,同样的函数实现,同样的指令,为什么时间消耗有