还有最后一个问题:InterpreterModule::GetInterpMethodInfo中的代码metadata::MethodBody* methodBody = image->GetMethodBody(methodInfo->token);,传入的是原始AOT泛型函数的token,而我们支持放松的补充元数据dll,即补充元数据dll中对应的泛型函数token与原始AOT泛型函数的token不一致。因此我们需要能够根据原始AOT泛型函数...
HybridCLR支持full genric sharing后,不再需要补充元数据,简化了工作流,较好地解决了补充元数据的以上缺点。 支持的版本 支持Unity 2021及更高的LTS版本。 原理 旧的泛型共享技术只能对class类型进行泛型共享。自2021.3.x LTS版本起,il2cpp已经支持完全泛型共享(full generic sharing)技术,即泛型参数无论是任何...
元数据内存 补充元数据内存 我们测试了对常见的aot程序集补充元数据后消耗的内存。社区版本消耗的内存大约为dll大小的4倍;商业化版本未开启完全泛型共享时约为1.3倍; 商业化版本开启完全泛型共享后由于不需要补充元数据,此项为0。商业化版本相比社区降低了67%(开启完全泛型共享时为100%)的内存。
支持使用Interpreter Assembly替换AOT Assembly(限制:必须不存在其他AOT Assembly对它的直接引用)。 支持补充元数据机制,彻底支持AOT泛型,参见《AOT泛型限制及原理介绍》。 支持AOT Hotfix,可以修复AOT模块的Bug。 支持任意C#函数注册到Lua之类的虚拟机,不限于Static函数,并且也不需要MonoPInvokeCallbackAttribute。条件是注...
下图中被框选的三段语句是HybridCLR的一些底层实现,它的作用是补充一些元数据,也可以理解为补充一些数据类型的信息 下图中被黄色标注的语句是比较重要的:hello, HybridCLR.prefab 它的内部实现的机制是创建了一个预制体,然后通过预制体加载一个脚本 下面我们就要对这个预制体加载的脚本做热更新 ...
上面这个错误就是因为AOT泛型函数实例化缺失导致的,所以我们最好补充元数据。补充元数据的代码如下: // 前三个是系统自带,推荐带上,第四个是自己游戏AOT的程序集var AotAssemblyDlls=new string[]{"mscorlib","System","System.Core","MyGame.Framwork",};for(inti=0;i<AotAssemblyDlls.Length;i++){var aot...
/// 注意,补充元数据是给AOT dll补充元数据,而不是给热更新dll补充元数据。/// 热更新dll不缺元数据,不需要补充,如果调用LoadMetadataForAOTAssembly会返回错误 /// HomologousImageMode mode = HomologousImageMode.SuperSet; foreach (var aotDllName ...
五、工作流的变化 相较于目前 HybridCLR 全解释执行工作流,更显简单了,新工作流跟补充元数据基本一样,调用一个函数搞定 对于不需要新增dll的项目,整体工作流是简化的。 六,可以叫智能补丁 ? 不能叫补丁,语意差别很大,差分混合执行,增量混合执行技术 DHE。
包含了需要补充元数据的AOT assembly列表。这个字段原来在 HybridCLRGlobalSettings 中。 安装及打包及热更新测试 以Win64为例,其他平台同理。 安装HybridCLR (安装HybridCLR的原理请看 快速上手 ) 点击菜单 HybridCLR/Installer...,弹出安装界面。 如果安装界面没有错误或者警告,则说明il2cpp路径设置正常,否则需要你...