Unity热更——ILRuntime安装接入

news2024/11/15 22:09:11

一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; def quickSelect(a: List[int], k: int) -> int:seed(datetime.datetime.now())shuffle(a)l, r 0, len(a) - 1while l < r:pivot a[l]i, j l, r 1while True:i 1while i < r and a[i] < pivot:i 1j - 1while j > l an…

自动生成数据:Navicat 16 让数据测试更高效

文章目录 前言一、Navicat是什么&#xff1f;二、Navicat 16 新功能1. 自动生成数据2. 改进的用户界面3. 云同步 三、 安装指南Windows 版安装macOS 版安装Linux 版安装 四、使用示例&#xff1a;自动生成数据1. 创建连接2. 选择表3. 打开数据生成器4. 设置数据规则5. 生成数据…

top命令实时监测Linux进程

top命令可以动态实时显示Linux进程信息&#xff0c;方便观察频繁换进换出的内存的进程变化。 top命令执行示例如下&#xff1a; 其中&#xff0c;第一行表示系统当前时间、系统的运行时间、登录的用户数目、系统的平均负载&#xff08;最近1分钟&#xff0c;最近5分钟&#xff…

springboot艺体培训机构业务管理系统--论文源码调试讲解

第2章 开发环境与技术 开发艺体培训机构业务管理系统需要搭建编程的环境&#xff0c;也需要通过调查&#xff0c;对各个相关技术进行分析&#xff0c;选取适合本系统开发的技术与工具。 2.1 MySQL数据库 MySQL是一种具有安全系数、安全系数、混合开发性、高效化等特征的轻量…

基于Raft算法的分布式KV数据库:五、剩余部分

github地址&#xff1a;https://github.com/1412771048/Raft CPPRaft系列-剩余部分 首先我们看下第五章的架构图&#xff0c;图中的主要部分我们在前几张讲解完毕了&#xff0c;目前还剩下clerk和k-v数据库&#xff0c;而本篇的重点在于补全版图&#xff0c;完成&#xff1a;…

SQL注入sqli-labs-master关卡一

本文环境搭建使用的是小皮&#xff0c;靶机压缩包&#xff1a;通过百度网盘分享的文件&#xff1a;sqli-labs-php7-master.zip 链接&#xff1a;https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwdqwer 提取码&#xff1a;qwer 下载解压至phpstudy的WWW目录下即可。 第一…

关于Redis的面试题

一、为什么要使用Redis 内存数据库,速度很快工作单线程worker,串行化,原子操作,IO线程是多线程的。避免上下文切换使用 IO模型,天生支撑高并发kv模型,v具有类型结构具有本地方法,计算数据移动二进制安全,value值最大为512MB二、Redis是多线程还是单线程 Redis在6.0版本…

(免费领源码)java#SSM#MYSQL私家车位共享APP 51842-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1 课题的研究背景 1.2研究内容与研究目标 1.3ssm框架 1.4论文结构与章节安排 2 2 私家车位共享APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1功能性分析 2…

计算机网络(TCP报文段首部格式中序号和确认号)

TCP首部格式中的序号和确认号并不总是同时出现。 TCP首部的序号和确认号是根据TCP通信的不同阶段和目的来决定的。在建立连接的过程中&#xff0c;序号用于标识发送数据的起始位置&#xff0c;而确认号用于表示接收方期望接收的下一个数据的起始位置。这两个字段在TCP通信的不同…

【vulhub靶场之rsync关】

一、使用nmap模块查看该ip地址有没有Rsync未授权访问漏洞 nmap -p 873 --script rsync-list-modules 加IP地址 查看到是有漏洞的模块的 二、使用rsync命令连接并读取文件 查看src目录里面的信息。 三、对系统中的敏感文件进行下载——/etc/passwd 执行命令&#xff1a; rsy…

【Python】Python中的循环语句

循环语句 导读一、基本概念1.1 循环语句的执行流程1.2 循环语句的分类 二、while语句三、for语句四、break与continue五、死循环六、循环中的else语句七、range()函数结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我…

《Advanced RAG》-04-深度研究RAG技术Re-ranking

摘要 文章首先介绍了重新排序在RAG中的重要性&#xff0c;它允许对检索到的文档进行重新排序和过滤&#xff0c;以确保最相关的文档能够被优先考虑&#xff0c;从而提高RAG的效率和准确性。 接着&#xff0c;文章详细描述了两种主流的重新排序方法&#xff1a; 一种是使用重新排…

使用Jetbrains.Rider反编译Unity的DLL文件看源码

直接将dll文件的打开方式用Rider打开即可&#xff0c;打开BattleSeqGenertor.dll文件的效果如下&#xff1a;

Redis 的6种回收策略(淘汰策略)详解

Redis 的6种回收策略&#xff08;淘汰策略&#xff09;详解 1、Redis的六种淘汰策略1. volatile-lru2. volatile-ttl3. volatile-random4. allkeys-lru5. allkeys-random6. no-eviction 2、使用策略规则 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&am…

MyIP:强大且简单好用!

在这个数字化的时代&#xff0c;IP地址就像是我们的网络身份证。各位在日常的工作中&#xff0c;肯定会会遇到需要和 IP 地址相关的需求。 今天和大家聊一聊一个非常好用的开源 IP 工具项目 - MyIP。 简介 MyIP一个开源IP工具箱&#xff0c;提供了一系列的网络检测工具&…

适合双11入手的蓝牙耳机推荐?4款开放式耳机测评

2024年也确实快到大家购物疯狂买买买的双11日子了&#xff0c;我相信肯定也有人在购物车攒了一大堆商品就等着双11清空了。那肯定现在还有人在为双11的购物车放什么东西发愁吧&#xff0c;那对于我来说&#xff0c;双11的购物车应该也是要有蓝牙耳机的一席之地的。 因为毕竟在…

Python酷库之旅-第三方库Pandas(068)

目录 一、用法精讲 271、pandas.Series.dt.dayofyear属性 271-1、语法 271-2、参数 271-3、功能 271-4、返回值 271-5、说明 271-6、用法 271-6-1、数据准备 271-6-2、代码示例 271-6-3、结果输出 272、pandas.Series.dt.days_in_month属性 272-1、语法 272-2、参…

吴恩达老师机器学习作业-ex7(聚类)

导入库&#xff0c;读取数据&#xff0c;查看数据类型等进行分析&#xff0c;可视化数据 import matplotlib.pyplot as plt import numpy as np import scipy.io as sio#读取数据 path "./ex7data2.mat" data sio.loadmat(path) # print(type(data)) # print(data…

【LabVIEW学习篇 - 13】:队列

文章目录 队列 队列 队列通常情况下是一种先入先出&#xff08;FIFO&#xff1a;First in First out&#xff09;的数据结构&#xff0c;常用作数据缓存&#xff0c;通过队列结构可以保证数据有序的传递&#xff0c;避免竞争和冲突。 案例&#xff1a;利用队列&#xff0c;模…

WordPress--漏洞复现

1.搭建好环境进入后台登录界面登录管理员 2.进入后选择外观---编辑 3.将文件内容改为我们的一句话木马&#xff0c;点击更新文件 4.访问这个文件显示出phpinfo证明注入成功