ILRuntime 第一集
一、ILRuntime的介绍
IOS无法热更的原因
苹果AppStore的审核准则中,命令禁止应用程序分配具有可执行权限的内存,带有JT功能的的脚本虚拟机无法运行, 无法加载动态链接库
安卓Google Play强制64位之后也必须使用IL2CPP了
LUA
长期以来,LUA是Unity生态中唯一一个可以热更的脚本语言
解释执行,不受平台限制,但是较慢
对于习惯使用C#的团队来说,诸多不便
ILRuntime
C#的解释执行引擎
开发和热更新无缝衔接
团队技术线统一
二、ILRuntime的安装
通过packageManager 可安装
导入会报错 是因为未开启unsafe
2017以上版本 勾选 Project Settings -> player -> Allow 'unsafe' Code 解决
其他方案 查看官方文档介绍 — ILRuntime
打开HotFixProject项目,生成热更dll
打开01_HelloWorld 点击运行,即可看到输出
ILRuntime的基础使用方法 pdb文件是调试数据库,如需要日志中显示报错行号,则必须提供PDB文件,
不过由于会额外耗用内存,正式发布的时候请将pdb去掉,下面loadAssembly的时候pdb传null即可
主工程调用热更工程函数:
初始化相关
热更类
主工程调用热更工程代码
appdomain.Invoke("HotFix_Project.InstanceClass","StaticFunTest",null,null)
第一参数 命名空间.类名,
第二参数 函数名字
第三参数 静态传null,不是静态函数 传对象
第四个参数 传函数需要参入的参数 (多个参数 在末尾加 , 继续传入)
优点:方便
缺点:性能差,通过字符串找到类再找函数
性能高一点的方法如下
appdomain.LoadedTypes 保存了所有已经加载的ILRuntime的类型
可以通过名字找到对应的类型
再通过IMethod method = Type.GetMethod(方法名,参数个数) 找到对应的方法
参数数量相同 传入List 有重载函数可以调用 , 例如指定类型,返回值等
通过参数获取方法
StaticFunTest2是静态函数中的方法 参数为int
先通过appdomain.GetType(typeof(int))获取IType
在定义List 把intType传进去。
然后调用重载函数ype.GetMethod(方法名,参数List,null) 获取具体方法
最后invoke调用
注:该方法有GC 传入的123 会转Object ,会有GC
无GC方式:通过pushInteger 压栈 传参数
注:静态函数直接压参数,非静态函数,先压入对象,再压参数
压栈的顺序就是参数的顺序
如何实例化热更中的类
第一种 appdomain.Instantiate(类名,构造函数)
第二种 拿到ILType直接调用.Instantiate();
IType type= appdomain.LoadedTypes["类名"];
Object obj2 = ((ILType)type).Instantiate(参数(无参构造不用传));
调用成员参数
代码解释:
对属性的调用 是在名字前加入get 或者set
所以上图中 传入名字为 get_ID
无GC调用
压入之前实例化的Obj对象
直接Invoke
通过ReadInterger()读取返回值,打印出来
主工程调用热更工程的泛型函数
代码解释:
1,比如传string类型参数
先使用GetType(C#中类型) 获取到IL中的类型IType
然后生成泛型参数列表 genericArguments
然后通过 InvokeGenericMethod方法调用
2,同样可以用GetMethod的方式获取到方法 然后调用
复杂的函数调用 带out 或ref
代码解释:
上图中代码注释足够了。。
在热更中调用主工程方法
引入dll的时候 注意设置对应dll的 复制本地的选项 改为false
到此结束,
ILRuntime 第一集相关推荐
- 进击的python【第一集】
进击的python[第一集] 1.环境安装 安装python Windows平台安装py的时候要记住安装的位置,方便制定PATH 官网下的安装包可以安装可以卸载 windows制定配置文件路径 C:\ ...
- Redis第一集:Windows下安装Redis和测试
Redis第一集:Windows下安装Redis和测试 一.资源 Windows下的Redis的下载地址 点击这里即可下载,如果进不去GitHub的话,可以上网搜一下怎么进GitHub,搭个梯子(●ˇ ...
- Apache POI和EasyExcel 第一集:小叙
Apache POI和EasyExcel 第一集:小叙 最近的课程没有上半学期那么多了,作业也不用每天熬夜拼命的写了,但是经历过上半学期的忙碌之后,闲下来也是怪难受的.闲来无事突然发现了一个教学视频, ...
- LaTeX入门第一集!LaTeX下载资源分享!LaTeX教学资源分享!TeXstudio下载资源分享!
LaTeX入门第一集!LaTeX下载资源分享!LaTeX教学资源分享!TeXstudio下载资源分享! 一.下载资源 以下提取码均为210916 LaTex下载资源(腾讯微云版) LaTex下载资源( ...
- Git入门第一集!(Git的下载地址、下载资源)
Git入门第一集!(Git的下载地址.下载资源) 一.Git环境下载 Git官网下载地址 Git淘宝镜像地址 二.基本的Linux命令(用于GitBash) 1)cd : 改变目录. 2)cd . . ...
- 第一集 企业IT体系结构
第一集 企业IT体系结构<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" / ...
- java 数组下标6,这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习...
源自:6-8 使用 foreach 操作数组 这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习 public class practice_1_6_8 { pu ...
- MCGS 无限配方数据存储及U盘导入导出-第一集
第一集https://blog.csdn.net/qq_33259323/article/details/123751336第二集https://blog.csdn.net/qq_33259323/a ...
- 华为GT3第一集-安装HAP
Flag: 华为GT3第一集-安装HAP 华为GT3第二集-程序员必备软件之心率异常自动保存代码介绍 华为GT3第三集-心率异常自动保存代码之环境搭建 华为GT3第四集-心率异常自动保存代码之页面布局 ...
最新文章
- 客快物流大数据项目(二十二):Docker环境中安装软件
- ThunderGBM:快成一道闪电的梯度提升决策树
- sync.Map低层工作原理详解
- 索尼服务器维护时间,索尼云服务器
- 前端渲染与后端渲染之间的区别?
- 8月23日亮相?三星Galaxy Note10+ 5G版渲染图曝光
- 修改smb默认端口_centos7 ssh端口更改方法
- 用户空间缺页异常pte_handle_fault()分析--(上)【转】
- MySql的基本操作以及以后开发经常使用的常用指令
- ul列表中包含input时line-height属性失效的解决办法
- 【Java-网络编程】一对一聊天系统的实现
- PHP混淆zym解密
- WebView加载String字符串
- 微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理
- 基础提升*哈希函数与哈希表
- 基于Verilog的TCAM硬件实现
- L1-012 计算指数 (5 分) C语言
- 海上平台作业三维虚拟仿真
- 字母概率C语言,从26个英文字母中任意选一个,是C或D的概率是()。
- C语言_统计单词长度