前言

  • 最近闲着没事做,于是用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. HDU 4411 Arrest(费用流)
  2. android textview图标左侧,Android 自定义 TextView drawableTop 图标与文字左对齐(效果图)...
  3. 打好网约车“安全牌”,T3出行以人、车、路保障
  4. MySQL基础学习过程
  5. 透过 OKR 进行项目过程管理 1
  6. NumPy 数学函数
  7. 机器学习中的数据预处理(sklearn preprocessing)
  8. 两个问题,关于XP进程优化及SVSP虚拟存储平台
  9. [html] 你了解什么是无障碍web(WAI)吗?在开发过程中要怎么做呢
  10. html上传预览图片原理,关于html中图片上传预览的实现
  11. c语言计算成绩大于90为优秀,输入一个分数,如小于60分,则输出不及格;如大于60小于85,输出良好;85分以上则为优秀。 用c语言编写...
  12. Qt程序缺少dll解决方案
  13. c#特性 java注解,Java注解全面了解
  14. 50道编程题(有精力的同学看看)
  15. Flash MX 2004 基础知识
  16. android系统壁纸下载,提前用上Android 12系统 官方高清壁纸下载
  17. 博弈论——取石子问题
  18. iOS开发之主题皮肤
  19. 爬取DMP_ISV版(达摩盘服务商版)画像数据
  20. 月嫂公司如何把一次性的生意,变成源源不断的生钱机器

热门文章

  1. matplotlib: 双Y轴、同一坐标轴中不同类型图、设置坐标轴刻度格式
  2. 计算机教师职称申报工作总结,教师职称专业技术工作总结
  3. 聚合路由器5G+4G是什么意思
  4. AutoCAD调试模式下文字不显示
  5. css动画效果transtion,transform,animation
  6. 【转】从零开始React服务器渲染
  7. java 迭代器 entryset_Java使用entrySet方法获取Map集合中的元素
  8. 坏人比好人更容易成功 为什么你决定做好人?
  9. 关于TCP封包、粘包、半包
  10. 商标注册查询入口官网