UH4L1——环境搭建和开发方式
UH4L1——环境搭建和开发方式
ILRuntime环境搭建
想要正常使用ILRuntime的注意事项:
- 修改manifest.json文件中的配置
- Allow ‘unsafe’ Code 选项
- 通过HotFix_Project工程生成用于热更的dll和pdb文件
ILRuntime的基本原理就是利用Mono.Cecil库,去解释执行热更工程中DLL中的代码
环境搭建具体步骤
-
修改工程文件夹下Packages文件夹中的manifest.json文件,在
dependencies
字段前加上:
1
2
3
4
5
6
7
8
9"scopedRegistries": [
{
"name": "ILRuntime",
"url": "https://registry.npmjs.org",
"scopes": [
"com.ourpalm"
]
}
],保存后就会弹出该窗口
或者在 ProjectSetting 中的 Package Manager 添加对应信息
1
2
3Name: ILRuntime
Url: https://registry.npmjs.org
Scopes: com.ourpalm
-
在Unity工具栏中的 Window 中打开 Package Manager
左上角的Packages选择My Registries选项,选择其中的ILRuntime并安装,安装完成后 再导入其示例工程
不要忘记导入这个示例
-
这时会出现报错,因为ILRuntime中会用到C#中的unsafe关键字,
我们需要在工具栏的 Edit 中选择 Project Settings,在Other Setting 中 勾选 Allow ‘unsafe’ Code 的选项
-
执行完上述操作后,可以在工具栏看到ILRuntime的选项
ILRuntime的开发方式
通过知识点一导入ILRuntime的工具后,我们可以在 工程目录下的 Samples\ILRuntime\2.1.0\Demo
文件夹中
看到一个HotFix_Project的文件夹,该文件夹在编辑器中无法看到,需要在文件浏览器中查看,该工程就是我们的热更工程
处于Assets文件夹下的文件夹,如果文件夹名字的最后一个字符为~
,则该文件夹不会在Project窗口内显示
ILRuntime的开发方式分成了两个部分
- 直接在Unity工程中进行非热更部分的开发(和以前写C#一样)
- 在热更工程中开发需要热更新的部分(同样使用C#)
导入ILRuntime过后我们需要在两个工程之间切换开发,两个工程之间可以相互访问调用,这就是在开发ILRuntime热更项目时的工作方式
什么是ILRuntime中的跨域访问
ILRuntime中的跨域访问就是指 在原始的Unity工程之间 和 热更工程 之间的相互访问调用
比如:
- 在Unity工程中使用热更工程中声明的内容(类、委托、函数等)
- 在热更工程中使用Unity工程中声明的内容(类、委托、函数等)
执行我们的第一个ILRuntime热更程序
-
通过文件浏览器打开 HotFix_Project 工程(如果报错,请修改工程的目标框架)
-
生成成功后,可以在Unity工程的 StreamingAssets 文件夹中看到 HotFix_Project 的两个文件,一个是dll文件、一个是pdb文件
它的原理是设置了输出路径到本工程下的Assets文件夹下的StreamingAssets文件夹(在相对路径中
..\
相对于上级目录)
-
打开示例工程HelloWorld,运行。成功后可以在Console窗口看到打印信息
ILRuntime的基本原理
关键点:Mono.Cecil
库,它是一个专门用于读取C#编译的DLL的开源第三方库,通过它我们可以获取到
- DLL中的类型和方法原信息
- 读取方法体的IL汇编指令(何为IL:C#编译出来的中间语言,详见:CS5L1——.NET相关知识)
- 可以读取PDB调试符号表文件,用于断点调试等等
- 可以修改DLL中的元信息和方法体内容并写回DLL
ILRuntime通过该库,在运行时通过读取解释DLL文件中的内容来执行我们热更的代码