之前已经把Launcher启动场景及HybridCLR热更新做了简单介绍,这篇文章将对脚本热更进行详细说明。
先讲一下脚本热更,脚本热更用了HybridCLR热更技术,这个方案是特性完整、零成本、高性能、低内存的Unity全平台原生C#热更方案。具体怎么用就不详细说了,官方文档有详细说明。文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057
下面我只说在我这个框架里是怎么使用的。首先框架里分成了四个程序集,分别是App.Frame.Editor、App.Main、App.Frame、App.Module,其中App.Frame.Editor是Editor程序集,这个是不用管的,最终打包成app是不会打进包内的。App.Main是打进包内的,不参与热更,这里面的代码想要更新只能重新打包app。剩下的App.Frame、App.Module是参与热更的程序集。文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057
- 首先,定义系统默认程序集和热更程序集用来加载对应程序集
1 2 3 4 5 6 7 8 9 10 11 12 |
public static List<string> AOTMetaAssemblyNames { get; } = new List<string>() { "mscorlib.dll", "System.dll", "System.Core.dll", "UnityEngine.CoreModule.dll", }; public static List<string> HotfixAssemblyNames { get; } = new List<string>() { "App.Frame.dll", "App.Module.dll", }; |
2. 加载完脚本AB包后将脚本对应的程序集加载并运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
private void LoadHotfixAssemblies() { for (int i = 0; i < Global.HotfixAssemblyNames.Count; i++) { string name = Global.HotfixAssemblyNames[i]; TextAsset ta = HybridABManager.Instance.LoadAsset<TextAsset>("App", "Dll", name); System.Reflection.Assembly.Load(ta.bytes); } } private void LoadMetadataForAOTAssemblies() { HomologousImageMode mode = HomologousImageMode.SuperSet; foreach (var aotDllName in Global.AOTMetaAssemblyNames) { TextAsset ta = HybridABManager.Instance.LoadAsset<TextAsset>("App", "Dll", aotDllName); LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(ta.bytes, mode); } } |
注意:上面的代码只是部分重要代码。具体功能可以在相应脚本内查看,需要重点注意的是在加载运行程序集的时候需要先加载运行系统程序集。文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057
项目GitHub仓库地址:https://github.com/Josh-Jun/UnityAppFramework.git文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057
项目Gitee仓库地址:https://gitee.com/shijun_z/UnityAppFramework.git文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057 文章源自大腿Plus-https://www.zhaoshijun.com/archives/2057
我的微信
微信扫一扫
shijun_z
我的QQ
QQ扫一扫
846207670
评论