首先说一下最终目标, 一个主程序从网络上加载配置,通过配置得到功能模块(含美术和脚本资源)的下载地址,下载相关内容后动态加载运行功能模块。功能模块和主程序分属不相关的两个项目。
Unity项目中HybridCLR是特性完整、零成本、高性能、低内存的Unity全平台原生c#热更方案,使用起来真是简单,官方教程到是有但是我觉得还不够,首先好多重点和使得场景没有谫清楚,本系列教程从零入门开始说一说HybridCLR的使用。网络上所有教程全部都是照搬官方教程,毫无创新。重写完yooasset的资源加载是时候看一下HybridCLR了。废话不多说,开始之前需要一些预备知识:
(1)Unity 中对程序集的拆分
我们需要掌握的内容包含: 普通unity项目中所有脚本会在编译后自动生成一个程序集,默认情况下名为:Assembly-CSharp.dll ,还需要知道的目录在:项目目录、Library\ScriptAssemblies\ 这个里面。其中我们是可以按文件夹指定生成的.dll文件,在Assets中放脚本的目录下新建一个宏就可以把文件夹下所有的脚本指定到单独的dll中。在目录下右键》 Create -> Assembly Definition 就可实现。详细可参考:
程序集定义 - Unity 手册
(2)JIT VS AOT概念 - 只需要了解 避免阅读中感觉陌生
JIT:即时编译,或者又称为动态编译,是在程序执行时才编译代码,即将一条中间托管语句(CLI)翻译成一条机器语句,然后执行这条语句。但它同时也会将编译过的代码进行缓存,而不是每一次都进行编译。所以说它是静态编译和解释器的结合体。
AOT:静态编译,同样使用了JIT来进行编译,只不过它在程序运行之前就编译好了。但还是有一部分代码会即时编译。
AOT的过程简要:
收集需要编译的代码。
使用JIT编译代码。
发布编译过的代码和一些元数据。
调用本地汇编器或连接器处理后生成可执行文件。
注:IOS平台禁止使用JIT编译器,所以Mono提供了一种FULL AOT模式,这里不赘述。
下面依旧是官方的 快速上手 不过只列要点再加一点儿小小的改动。
可以先快速阅读一下官方的教程,
快速上手 | HybridCLR
1、安装Unity 以及相关的必要模块 Windows Build Support(IL2CPP)或Mac Build Support(IL2CPP)
2、代码编译器 visual studio 2019 或 visual studio code得提前安装。
3、Git工具的安装,后面我们需要用到它。
4、开始建两个项目,一个用做主程序 ,一个用做功能模块程序。
我们要实现的目标是从主程序加载 功能模块 ,功能模块所有资源(包含脚本)在主程序中均可正常使用。
内容有点多,下一节再详细展开记录。
出自博客:Unity3D HybridCLR 从零开始 与众不同系列(一) - 乐帮网
源码会在最后一章放出。