ILRuntime使用指南

news2025/2/26 6:08:57

前言

  • 最近闲着没事做,于是用ILRuntime做了一个小游戏
  • 中间遇到一些坑,对于ILRuntime的认识更清楚了。
  • 其它技巧
  • 自动转换DLL

设置引用文件夹

  • 我们在热更项目里面写代码的时候需要用到Unity的DLL,可是这些DLL引用起来查找就很麻烦。
  • 这时候可以设置文件夹
  • 编辑器就会自动提示需要引用的DLL在这里插入图片描述

实际环境如何引用DLL的

  • 这一点我很疑惑,比如我在热更里面用到了Unity的某个DLL
  • 可是在主工程里面又没有用到,那我在打包编译的时候,这个DLL就不会被放进去,那我热更的时候解释器找不到DLL怎么办
  • 最后我发现只需要CLR自动绑定就可以了
  • 大概原理就是把引用的DLL做一些包装,外加反射快速一些
[MenuItem("ILRuntime/Generate CLR Binding Code by Analysis")]
	static void GenerateCLRBindingByAnalysis()
	{
		//用新的分析热更dll调用引用来生成绑定代码
		ILRuntime.Runtime.Enviorment.AppDomain domain = new ILRuntime.Runtime.Enviorment.AppDomain();
		var bytes = File.ReadAllBytes(DefaultPath.LoadDllPath);
		using (var dllStream = new MemoryStream(bytes))
		{
			domain.LoadAssembly(dllStream);

			//Crossbind Adapter is needed to generate the correct binding code
			InitILRuntime(domain);
			ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(domain, "Assets/ILRuntime/Generated");
		}

		AssetDatabase.Refresh();
	}

	static void InitILRuntime(ILRuntime.Runtime.Enviorment.AppDomain domain)
	{
		domain.RegisterCrossBindingAdaptor(new CoroutineAdapter());
		domain.RegisterCrossBindingAdaptor(new IAsyncStateMachineClassInheritanceAdaptor());
	}
  • 需要初始化绑定
		ILRuntime.Runtime.Generated.CLRBindings.Initialize(appdomain);

写适配器

  • 我本来以为只有当热更项目需要用到主工程的类和文件时候才需要写适配器
  • 其实对于ILRuntime不支持的一些功能,也需要自己写适配器
  • 比如async await需要写适配器,不过我在ILRuntime的issue里面找到一个写好的脚本
    异步适配器脚本
  • 协程也需要用适配器,而且要调用Unity主工程来调用
  • 协程适配器
  • 使用Unity的事件也需要写委托转换器
	appdomain.DelegateManager.RegisterDelegateConvertor<UnityEngine.Events.UnityAction>((act) =>
		{
			return new UnityEngine.Events.UnityAction(() =>
			{
				((Action)act)();
			});
		});
  • 其它各种类型的委托也需要自己定义
	appdomain.DelegateManager.RegisterMethodDelegate<UnityEngine.GameObject>();
		appdomain.DelegateManager.RegisterMethodDelegate<AsyncOperationHandle, Exception>();
		appdomain.DelegateManager.RegisterMethodDelegate<bool>();
		appdomain.DelegateManager.RegisterMethodDelegate<ILRuntime.Runtime.Intepreter.ILTypeInstance, ILRuntime.Runtime.Intepreter.ILTypeInstance>();

使用ILRuntime的Debug功能

  • 我只说一点
  • 按钮在这里在这里插入图片描述
  • 如果你链接不上项目,就把VS和unity全部关了再打开一遍就可以

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

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

相关文章

带你了解LINUX反弹Shell的各种姿势(超详细)

简介 LInux反弹Shell(Reveser Shell), 也可以称为反向Shell, 由被控制端主动向控制端发送请求建立通讯, 随后将执行命令的结果输出到控制端, 本质上是网络概念的客户端与服务端的角色反转 本篇文章介绍LINUX反弹Shell的多种姿势, 在真实的渗透环境中, 根据客户端存在哪些命令…

深度学习求解微分方程系列四:一种基于自适应激活函数的PINN求解方法—burger方程逆问题

下面我将介绍内嵌物理知识神经网络&#xff08;PINN&#xff09;求解微分方程。首先介绍PINN基本方法&#xff0c;并基于自适应激活函数的PINN求解框架利用Pytorch实现求解含时间项的一维burger方程逆问题。 内嵌物理知识神经网络&#xff08;PINN&#xff09;入门及相关论文 深…

视频怎么消除人声?一款视频去人声软件,轻松去除视频人声

视频消除人声是一个优质的视频文件必须经历的步骤。当前&#xff0c;分享视频的用户越来越多&#xff0c;只有原创且有亮点的视频才能更吸引人。但是很多时候自己录制的原创视频总是有各种声音&#xff0c;所以很难制作出一个好的视频&#xff0c;获得更多的关注。 那视频怎么消…

制霸GitHub热榜的Spring Cloud Alibaba源码笔记,果然是阿里传出的

7年前面试最常问的并且可以顺利拿到高薪的技能是 Dubbo 3年前面试,只要你简历上有Spring Cloud 项目的相关经验,肯定会打动面试官&#xff0c;现在呢?恐怕简历上有Dubbo和简单的Spring Cloud技术和经验是无法让面试官高看你的。 Spring Cloud Alibaba 近几年在受到国内不少开…

我们都有光明的前途·OI 生涯回忆录

挺震撼的&#xff0c;不知不觉&#xff0c;我就从一个什么也不懂的萌新&#xff0c;成长为一个能够独立思考的普通 OIer&#xff0c;直到不得不面对眼前的退役生活了。 近四年半的时间&#xff0c;我在洛谷、CodeForces、Atcode、Uoj、Loj 等各大网站都有做题记录&#xff0c;重…

ST-link/V2引脚定义和更新固件说明

LED状态说明 闪烁红色&#xff1a;ST-LINK/V2连接到计算机后&#xff0c;第一次USB枚举过程 红色&#xff1a;ST-LINK/V2与计算机已建立连接 闪烁绿色/红色&#xff1a;目标板和计算机在进行数据交换 绿色&#xff1a;通讯完成 橙色&#xff08;红色绿色&#xff09;&#xff1…

iwebsec靶场 SQL注入漏洞通关笔记5- updatexml注入(报错型盲注)

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入&#xff08;宽字节注入&#xff09;_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入&#xff08;布尔型盲注&#…

Verilog 时序检查

setup hold recovery removal width period 指定路径延迟&#xff0c;目的是让仿真的时序更加接近实际数字电路的时序。利用时序约束对数字设计进行时序仿真&#xff0c;检查设计是否存在违反&#xff08;violation&#xff09;时序约束的地方&#xff0c;…

鲲鹏devkit开发套件——编译调试工具介绍

鲲鹏devkit编译调试工具介绍 编译调试插件是其中的一个子工具。编译调试插件即插即用&#xff0c;支持一键安装服务器鲲鹏编译器&#xff0c;支持单机下Nvidia GPU应用调试能力&#xff0c;通过统一调试界面调试GPU应用&#xff0c;实现cuda-gdb调试能力&#xff0c;以及鲲鹏平…

Spring Security 使用JSON格式参数登录的两种方式

前言 在 Spring Security 中&#xff0c;默认的登陆方式是以表单形式进行提交参数的。可以参考前面的几篇文章&#xff0c;但是在前后端分离的项目&#xff0c;前后端都是以 JSON 形式交互的。一般不会使用表单形式提交参数。所以&#xff0c;在 Spring Security 中如果要使用…

python3-turtle(1)

turtle 是海龟绘图模块&#xff0c;海龟绘图很适合用来引导孩子学习编程&#xff0c;最初构想来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言&#xff0c;它是基于tkinter 模块打造&#xff0c;提供简单的绘图方法。 turtle模块假…

集合框架----源码解读ArrayList篇

1.ArrayList<E> ArrayList是继承AbstractList<E> List 接口的可调整数组实现。实现所有可选的列表操作&#xff0c;并允许所有元素&#xff0c;包括null。除了实现List接口之外&#xff0c;该类还提供了一些方法来操作内部用于存储列表的数组的大小。(这个类大致相…

准备蓝桥杯的宝贝们看过来,二分法一网打尽(基础篇)

今天给大家介绍一下简单的二分法&#xff08;刷题第一步&#xff01;&#xff09; 二分基础题链接 二分查找有个很明显的特点就是有序&#xff0c;这个特点同学如果在题中看到就要格外注意 一定要看完&#xff0c;基本的三种解法&#xff0c;后面还有真题链接哦&#xff01;…

异步请求-AJAX

什么是同步交互 首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后&#xff0c;按照预先编写好的程序中的业务逻辑进行处理&#xff0c;比如和数据库服务器进行数据信息交换。最后&#xff0c;服务器对请求进行响应&#xff0c;将结果返回给客户端&#xff0c;返…

TCP三次握手与四次挥手

TCP三次握手的建立与四次挥手的过程 TCP协议 TCP 用于处理实时通信TCP是基于端口&#xff0c;面向连接的传输层协议TCP的握手和挥手本质上都是四次&#xff0c;只不过握手合并成三次。因为主机之间要想通信需要先建立双向数据通道TCP的主要特点是传输稳定性高&#xff0c;但是…

[自建题库]c认证初级

UTF-8的编码实现方式有几种? UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 二进制数1111.1111转换成十进制数是多少&#xff1f; 如果二进制数字“1000111______”采取偶校验&#xff0c;那么下划线的校验位处应该填什么&#xff1f; 0 在MPEG-4中&#xff0c;第九部分定义了IP网络传…

JS高级-语言特性(持续更新一)

JS高级-语言特性 JS高级-语言特性 一、JS面向对象编程 1.1面向对象介绍 1.2面向对象编程 1.3创建对象 二、构造函数 2.1构造函数 2.2构造函数存在的问题 三、原型 3.1构造函数的prototype属性 3.2构造函数、实例、原型三者之间的关系 3.3原型对象的获取及修改 3.4原…

[附源码]Python计算机毕业设计高校电子作业提交与批改系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

CTFHub | Refer注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

[C#] GDI+ 之鼠标交互:原理、示例、一步步深入、性能优化

一、前言 “GDI”与“鼠标交互”&#xff0c;乍一听好像不可能&#xff0c;也无从下手&#xff0c;但是实现原理比想象中要简单很多。 基于“GDI”的“交互”&#xff0c;应用场景也很多&#xff0c;比如&#xff1a;流程图、数据图表、思维导图等等。 本篇文章就通过多个示例…