前言

  • 最近闲着没事做,于是用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 codeInitILRuntime(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全部关了再打开一遍就可以

ILRuntime使用指南相关推荐

  1. Unity学习资源指南[精心整理]

    前言 进入一个领域,最直接有效的方法就是寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括: 1.主流的学习社区与网站. 2.该领域的知名大牛与热心分享的从业者. 3.如何有效的激 ...

  2. U3D+ET6+IlRuntime 网络战棋游戏开发

    本期内容:(unity3d引擎)战棋游戏的网络对战. 关键字:操作同步,防外挂,断线重连,弱网设计 课程任务:为单机游戏,增加网络对战功能 学完本课程之后,收获网游开发的核心技术 本期内容建议结合视频 ...

  3. Unity中的热更新的基础知识,Xlua与ILRuntime基础知识

    1.什么是热更新 热更新是指在不需要重新编译打包游戏的情况下,在线更新游戏中的一些非核心代码和资源,比如活动运营和打补丁.热更新分为资源热更新和代码热更新两种,代码热更新实际上也是把代码当成资源的一种 ...

  4. 超详细中文预训练模型ERNIE使用指南-源码

    作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...

  5. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  6. ASIC设计-终极指南

    ASIC设计-终极指南 ASIC Design – The Ultimate Guide ASIC设计-终极指南 ASICs代表特定于应用的集成电路,指的是针对特定应用而设计的半导体解决方案,与其他解 ...

  7. Python神经网络集成技术Guide指南

    Python神经网络集成技术Guide指南 本指南将介绍如何加载一个神经网络集成系统并从Python运行推断. 提示 所有框架的神经网络集成系统运行时接口都是相同的,因此本指南适用于所有受支持框架(包 ...

  8. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  9. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

最新文章

  1. 一个线程中lock用法的经典实例
  2. 【Linux基础】 diff命令的参数详解和实例
  3. 华师大c语言作业答案,2018华东师范大学计算机系机试题目代码
  4. python 简单web音频_Python Twisted web服务器音频fi
  5. 2020年十大消费新机遇
  6. 自己编写一个前端精确打印控件
  7. Linux文本编辑器之vim
  8. 大数据学习笔记32:Hive - 下载、安装与配置
  9. BZOJ3282: Tree (LCT模板)
  10. php获取静态url地址,[静态/伪静态]自定义URL地址详细教程
  11. CSS动画 animation与transition
  12. 沧海的孤塔-chimera
  13. 8-08双重循环--九九乘法表
  14. Fibonacci法与黄金分割法
  15. SpringAop_2通知(新手)和无法找到元素 'aop:aspectj-autoproxy' 的声明
  16. Java poi api插入文字水印到docx文件
  17. 抓取 google 搜索结果
  18. 携程在线网页制作(flex布局)(静态页面)
  19. Word:表格在页面中垂直居中
  20. js实现kmp算法_基于KMP算法JavaScript的实现方法分析

热门文章

  1. 漂流瓶 php,漂流瓶推送需求的逻辑实现代码
  2. 数据结构线性结构和非线性结构
  3. 杂谈云计算与网络革命
  4. python实现FM算法
  5. 微信小程序——走马灯式抽奖
  6. 用Python偷偷告诉你国庆8亿人都去哪儿浪?
  7. 浏览器渲染和服务器渲染区别
  8. C语言 题目 1724: 后缀子串排序
  9. node.js项目的Cannot find module ‘xxx’问题
  10. Ajax(实现前后端交互效果)