一、ILRuntime相关地址
1、官网文档地址
2、GitHub上开源的ILRuntime项目工程
3、GitHub上的官方ILRuntime-Unity实例工程
4、官方视频教程-Unity中文课堂(需付费)
5、ILRuntime入门笔记-赵青青-博客园
6、ILRuntime 的学习-简书
二、ILRuntime调试工具下载安装
1、旧版本
从官方文档给的下载地址,直接下载ILRuntime Debugger插件的安装包。
双击安装,直接下载安装到VS或VSCode里。
2、新版本
当前2.1.0版本,由于调试协议变更,2.1.0以上的版本插件,不和以前版本相兼容,需要从VS和VSCode插件商店安装新版本调试插件
可直接打开VS,选择“继续但无需代码”选项来打开VS,
在VS的扩展->管理扩展(Ctrl+Shift+X)菜单,打开扩展管理器,
搜索ILRuntime,找到ILRuntime Debugger,直接安装。
注:VS上点击安装后,注意提示:下载完成,关闭VS,安装插件。
这时候需要关闭VS,安装程序会自行安装。
3、下载安装和使用说明
调试插件在VS和VSCode的使用有些差别
VSCode里:F5新建调试Profile
VS里:点击菜单中的Debug->Attach to ILRuntime按钮。
注:不是“附加Unity调试程序”;
另外可能版本VS不同或个人设置,本人的2022版VS,按钮位置在菜单的 “调试” 选项中。
三、ILRuntime下载导入(三种方式)
1、ILRuntime工程包下载后导入项目(不太建议)
下载地址:官方ILRuntime--GitHub开源工程
或ILRuntime的Releases
不过这里不建议通过ILRuntime工程来往项目里添加ILRuntime插件。
处理起来有点麻烦,没有下面两种方法简单方便。
2、把ILRuntimeDemo里的ILRuntime插件复制进项目(以往常用方法)
(1)Demo下载地址:Ourpalm--ILRuntimeU3D
(2)新旧版本Demo说明:
1)旧版本Demo
早先Unity内是一整个Assembly-Csharp.dll文件,而且需要手动导入ILRuntime包;
对应的Git上的ILRuntimeU3D项目包含:HotFix_Project和ILRuntimeDemo两个工程项目文件;
2)新版本Demo
如今Unity支持一个工程里有多个.dll文件,支持内置ILRuntime包;
Git上的ILRuntimeDemo项目也仅包含ILRuntimeDemo一个工程项目文件;
HotFix_Project放到了Assets\Samples\ILRuntime\1.6\Demo\HotFix_Project目录下。
(3)导入ILRuntime
打开ILRuntimeDemo工程的Assets文件夹:
1)旧Demo工程:
复制里面的ILRuntime、Mono.Ceil.20、Mono.Cecil.Pdb这三个文件夹,到个人项目的Assets文件夹里;
2)最新Demo工程:
无Mono的文件夹,复制的是ILRuntime、Samples、StreamingAssets这三个文件夹到项目中;
3)注:
仅复制ILRuntime、Samples也是可以的;
我们运行里面的示例demo,需要加载使用StreamingAssets里的资源;
但方便测试ILRuntime是否正常运行,这里把StreamingAssets也复制进项目中;
然后直接运行示例demo即可。
3、Unity直接导入ILRuntime包(比较建议)
(1)Unity可以找到Package,直接导入
比较新版本的Unity直接通过搜索Package Manager,下载安装ILRuntime即可。
然后在Assets\Samples\ILRuntime\1.6\Demo\HotFix_Project~目录中打开热更DLL的vs工程,
直接编译,就可以正常运行ILRuntime的Demo示例了。
(2)Unity找不到Package,添加Package后导入
Unity的Package Manager找不到ILRuntime,但还想从Unity PackageManager里直接安装
这时候就需要多一步操作,手动在Packages里注册ILRuntime的包。
方法1:通过manifest.json添加ILRuntime包
找项目的Package文件夹,打开Packages/manifest.json,在dependencies前添加ILRuntime的url信息;
ILRuntime的url信息:
"scopedRegistries":[
{
"name":"ILRuntime",
"url":"https://registry.npmjs.org",
"scopes":[
"com.ourpalm"
]
}
],
manifest.json文件:
方法2:通过AddPackage添加ILRuntime包
1)可通过Window->Package Manager->设置->AdvancedProjectSettings,来注册添加ILRuntime包信息;
2)也可通过File->BuildSettings->ProjectSettings->PackageManager来注册添加ILRuntime包信息;
注册信息,可从官方文档获取,实际也就是上面方法1里scopedRegistries的内容。如下图
(3)导入后查看插件
可在Assets的同级目录Package文件夹里查看导入的ILRuntime插件
(4)导入ILRuntime的Demo和测试ILRuntime的使用
参考ILRuntimeDemo导入项目,这里已经把ILRuntime放入Package里,
把Demo的Assets文件夹里的Samples、StreamingAssets这两个文件复制到项目的Asset文件夹里;
然后就可以选择Sample里的示例,进行运行测试。
四、导入后可能存在的问题和解决方法
1、Package注册ILRuntime后不显示插件
Package Manager 里注册了ILRuntime,
但Package里不显示 “My Registries”以及My Registries下面的 ILRuntime插件;
打开PackageManager时,界面显示一值刷新,最后控制台还会报错。
本质上是无法获取远程的包。
(1)报错:
[Package Manager Window] Error searching for packages.
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()
[Package Manager Window] Error searching for packages.
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()
(2)解决方法:
1)电脑网络故障,无法正确获取资源包;
可以先点PackageManager的包列表的右下角的刷新按钮,进行刷新;
刷新不行,这时候检查网络问题,甚至关闭Unity工程,进行电脑重启;
电脑重启后,确保网络正常(可以特别关注下GitHub能否正常使用)
2)账号失效,需要重新登陆Unity账号
确定不是网络问题,这时候检查Unity和UnityHub登录是否正常,以及许可证正否过期。
这里建议最好账号重新登录下,许可证刷新下,避免有时它不显示登录过期,许可证失效的说明,
只是单纯的看着正常而已;
之后再重新打开项目,打开PackageManager界面,等待刷新完成,就可以正常看到ILRuntime包;
参考文章:Unity报错Error searching for packages
3)删manifest.json文件
网上也有说删manifest.json文件解决该问题的,
个人以往也有过类似的:出问题删manifest.json文件,后面重新生成manifest.json文件解决报错。
不过还是建议删之前注意备份后再测试,避免出现程序崩溃无法挽救;
4)说明:
本人是第一种方法无效,第二种方法重登UnityHub账号后解决问题。
2、导入工程后没开启unsafe导致编译报错;
ILRuntime底层是用C++写的,有指针不安全代码;在Unity里建一个文件,并加上UnSafe;
(1)报错:
Unsafe code may only appear if compiling with /unsafe. Enable "Allow 'unsafe' code" in Player Settings to fix this error.
Assets\Samples\ILRuntime\2.1.0\Demo\Scripts\Examples\xxx.cs(11,21):
error CS0227: Unsafe code may only appear if compiling with /unsafe.
Enable "Allow 'unsafe' code" in Player Settings to fix this error.
(2)解决方法:
创建安全代码访问,开启Allow unsafe code选项
1)新建smcs.rsp文件
在Assets目录里,建一个名为smcs.txt的空文本,然后后缀改为.rsp,即得smcs.rsp文件;
2)在smcs.rsp文件中加入 -unsafe 语句
也可以先在smcs.txt里写入 -unsafe,然后再把后缀改为.rsp
注:
不同Unity版本文件名设置不同,其他版本安全代码访问文件可能就是其他名字不叫smcs了;
上面是Unity2017以上版本的设置,更低版本的设置要求请看官方文档。
3)开启Allow unsafe code选项
在PlayerSettings中勾选Allow unsafe code解决编译问题。
File->BuildSettings->PlayerSetting->Player->OtherSettings->AdditionalCompilerArguments下面
Allow 'unsafe' Code
3、GenerateCLRBinding里types.Add的类不存在
旧版可能存在的问题,新版已经修复;
GenerateCLRBinding是ILRuntime里的CRL绑定设置;
当ILRuntime导入项目的文件中,GenerateCLRBinding里types.Add的类不存在。
(1)报错:
The type or namespace name "CLRBingTestClass" could not be found.Are you missing an assembly reference?
Assets/ILRuntime/Adapts/Editor/ILRuntimeCLRBinding.cs(27,26):error CS0246:
The type or namespace name "CLRBindingTestClass" could not be found.
Are you missing an assembly reference?
(2)解决方法:
注释掉types.Add(typeof(CLRBindingTestClass));
同时该脚本的InitILRuntime(...)里的跨域继承的适配器暂时不需要,也给注释掉;
五、后续根据自己项目需求修改和使用ILRuntime
略