1.热更新
在游戏运行期间,动态修改游戏相关的逻辑或资源,玩家不需要重新安装游戏包。
2.做法
a.将执行的代码编译成dll,做成assetbundle
b.更新后,将新的代码资源加载到内存中,通过反射找到想要得到的Component
c.注意Plugins下的代码不能热更
d.iphone版本的C#代码无法热更新:
苹果官方禁止IOS下的程序热更新,JIT在IOS下无效
热更新方案:使用Lua插件,Lua脚本可以直接解释执行,将Lua脚本转化为文本资源(如同纹理、音频等),以更新资源的形式更新程序
3.AOT与JIT的概念
AOT:静态编译--运行前已经编译好,代码段不能被改变
JIT:即时(动态)编译--
就是一个程序在运行的时候创建,并且运行了全新的代码
,不仅生成而且运行了。IOS上的反射是部分支持,支持使用反射读取源代码,但不支持使用反射动态生成可执行代码,所以2.a的做法在iOS是行不通了。
这些是限制反射的命名空间
Profiler、Reflection.Emit、Reflection.Emit.Save functionality、COM bindings、The JIT engine、Metadata verifier