📄️ 编译 热更新assembly
热更新代码中有可能会包含 #if UNITY_EDITOR 、#if UNITY_STANDALONE_WIN 这样的宏开关,因此每个平台需要单独 编译热更新assembly。
📄️ 加载和运行
根据你们项目资源管理的方式,获得热更新dll的bytes数据。然后再直接调用Assembly.Load(byte[] assemblyData)即可。
📄️ 打包工作流
由于热更新本身的要求以及Unity资源管理的一些限制,对打包工作流需要一些特殊处理,主要分为几部分:
📄️ 发布WebGL平台
由于WebGL平台有较多特殊性,故特地单独文档介绍如何发布WebGL平台。本文档在 hybridclr_trial项目(github gitee )上演示发布过程。
📄️ 代码裁剪
Unity使用了代码裁剪技术来帮助减少il2cpp backend的包体大小。如果未做防裁剪处理,由于AOT主工程里的代码一般不多,大量的C#类型和函数被 裁剪,导致热更新中调用这些被裁剪类或函数出现如下异常:
📄️ AOT泛型
CLR中有两类泛型特性:泛型类型和泛型函数。泛型是c#中使用极其广泛的特性,即使一个没有明显包含泛型的用法,也可能隐含了泛型相关的定义或者操作。
📄️ 桥接函数
HybridCLR的interpreter与AOT之间需要双向函数调用。比如interpreter调用AOT函数,或者AOT通过interface接口或者delegate回调interpreter。