首页 > 其他分享 >Unity ILRuntime 实战教程系列

Unity ILRuntime 实战教程系列

时间:2023-10-25 11:47:06浏览次数:35  
标签:ILRuntime 解释器 项目 教程 dll Unity net

1.1 Unity 搭建ILRuntime开发环境

 

Unity热更新目前主流的方案有; Lua, ILRuntime, puerts, huatuo方案。前两个大家都比较熟悉了,puerts 是基于TypeScript开发的热更新,huatuo是基于C#的方案。后两个大家会比较陌生。本系列分享基于ILRuntime来做热更新。

 

ILRuntime热更新原理

 

  ILRuntime热更新原理是基于Unity引擎,内置一个.net 字节码解释器,解释执行.net字节码。对于开发人员而言,使用.net技术将游戏逻辑代码开发出.net标准的字节码动态库(.dll)。将.net字节码的dll放入到Unity的资源里面,然后加载这个资源文件里面的.net字节码,再用内置的解释器解析执行游戏逻辑。如果把这个”字节码.dll资源”放服务器,就可以实现更新下载,然后再装载运行。有原理可知,我们实现ILRuntime来开发项目,就可以分成2个部分:

  (1):内置.net 字节码解释器到Unity游戏项目中;

  (2):来创建一个.dll的.net项目工程,基于Unity引擎的.dll的库来开发游戏逻辑;

 

第(1)部分,ILRuntime框架已经为我们实现了.net字节码解释器,我们只要将它的代码拿过来,同时在我们的项目中初始化ILRuntime虚拟机解释器。第(2)部分,我们使用.net开发工具(Microsoft visual studio)创建一个.dll的.net项目,后面我们称为逻辑热更项目,同时把unity引擎里面的.dll的库添加引用到逻辑热更项目中,这样我们在开发游戏逻辑的时候就能直接引用到Unity的API和相关的智能提示。这样就让c#开发的Unity开发者最大限度的保留了Unity的开发习惯,上手很快。

 

 

 

ILRuntime 开发环境搭建

 

了解了上面的原理,我们搭建ILRuntime就很好理解了,首先第(1)部分,安装ILRuntime解释器代码库,同时在项目实例化ILRuntime解释器。这里我们以Unity 2020.2.3f1版本为例,来进行环境配置讲解。很简单,先安装.net,版本要求>= 4.6.1,我用的是4.7, 然后打开Unity编辑器,点击Window菜单, 选择PackageManager, 搜索ILRuntime安装即可。如图1.1-2所示:

 

 

 

 

注: Packages记得选”Unity Registry”, 然后安装ILRuntime即可,同时打开Unity PlayerSetting 选unsafecode模式。安装好ILRuntime开发环境后,接下来在项目中实例化ILRuntime的解释器。编写一个ILRuntimeWrapper.cs的全局单例,引入using ILRuntime.Runtime.Enviorment;ILRuntime名字空间,在Awake中实例化ILRuntime解释器实例: this.appdomain = new ILRuntime.Runtime.Enviorment.AppDomain();

 

 

 

 

AppDomain,就可以理解为是全局唯一的ILRuntime的解释器对象实例,主要用它来解释执行我们的.net热更项目的.dll字节码。

接下来安装第(2)部分, 创建一个基于.net的.dll的工程项目,作为可热更的游戏逻辑项目。 (如果你懒,可以拷贝使用示例代码里面的逻辑热更项目,.net版本和你自己的保持一致即可)这个项目有几个特点:必须最终是要生成.dll的.net动态库,要加上Unity使用的依赖,所以我们专门在这个项目下创建一个文件夹UnityDlls用来存放开发中依赖Unity的动态库。如图所示:

 

 

 

 

当我们开发游戏逻辑的时候,使用了Unity的那些库,只要从我们Unity的引擎里面找到这些.dll,然后复制到UnityDlls下面,然后添加引用到热更项目工程就可以了(这样你在热更项目就可以尽情的使用Unity的API,而且还是C#的)。如何找呢?有个小技巧,你打开标准的Unity项目工程,在” Assembly-CSharp”这里的引用就能看到我们使用的Unity的.dll, 例如我们要使用动画播放组件Animation, 它在UnityEngine.AnimationModule.dll里面,你就可以复制路径,找到这个.dll,然后把这个.dll拷贝到”逻辑热更项目”的UnityDlls里面,然后在逻辑热更项目中添加这个.dll的引用。

 

 

 

配置一下生成.dll的路径,我们把这个.dll生成到Unity项目里面的StreammingAssets路径下,这样方便我们编译后直接在Unity中马上就可以执行,所以我这边在逻辑热更项目中配置输出路径,如图: 

 

 

 

 

这样环境就配置好了,在逻辑热更项目中开发逻辑代码,开发完成以后,逻辑热更项目生成.dll给Unity,Unity 加载.dll解释执行。

 

标签:ILRuntime,解释器,项目,教程,dll,Unity,net
From: https://www.cnblogs.com/rainy1unity/p/17786758.html

相关文章

  • Linux下更新curl版本教程!
    在Linux下更新curl版本,您可以按照以下步骤进行操作:1、检查当前curl版本:首先,您需要确定当前系统中安装的curl版本。打开终端,并执行以下命令:curl--version 该命令将显示当前curl的版本信息。1、确认可用的curl版本:在更新curl之前,您需要确定可用的最新版本。您可以......
  • Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法
    Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法.Find(stringname):.FindGameObjectsWithTag(stringtag):.FindGameObjectWithTag(stringtag):.FindWithTag(stringtag):在Unity中,GameObject类具有一些用于查找和操作游戏对象的方法。.Find(stringna......
  • unity打包 android
    第一种:手动把没有的包都放入C:\ProgramFiles\Unity\Hub\Editor\2022.3.3f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib 第二种:修改镜像urlC:\ProgramFiles\Unity\Hub\Editor\2022.3.3f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools......
  • 史上最全vscode配置使用教程
    欲善其事,必先利其器。想要优雅且高效的编写代码,必须熟练使用一款前端开发工具。但前端开发工具数不胜数,像HBuilder、SublimeText、WebStorm、VisualStudioCode......等等,其中VSCode以其轻量且强大的代码编辑功能和丰富的插件生态系统,独受前端工师的青睐。网上有很多vscode的配......
  • webStack使用教程
    宝塔设置添加伪静态nginxlocation/{try_files$uri$uri//index.php?$args;}rewrite/wp-admin$$scheme://$host$uri/permanent;php版本切换7.2 链接直达是添加一个个的链接  不是分类目录是分类网址......
  • SolidWorks (SW) 2023 下载及安装教程
    本文所提供的安装教程均来自互联网,仅供大家学习使用,不可用于商业用途,否则本作者不负责,如本文提供的信息涉及侵权,请联系作者删除,谢谢大家配合。  软件介绍:Solidworks是一款功能强大的三维机械设计软件系统,有功能强大、易学易用和技术创新三大特点,这使得SolidWorks成为领先的、主......
  • 无涯教程-Clojure - float?函数
    如果数字为浮点数,则返回true。float?-语法以下是语法。(float?number)float?-示例以下是浮动测试函数的示例。(nsclojure.examples.hello(:gen-class));;ThisprogramdisplaysHelloLearnfk(defnExample[](defx(float?0))(printlnx)......
  • 无涯教程-Clojure - number?函数
    如果数字确实是数字,则返回true。number?-语法以下是语法。(number?number)number?-示例以下是数字测试函数的示例。(nsclojure.examples.hello(:gen-class));;ThisprogramdisplaysHelloLearnfk(defnExample[](defx(number?0))(printlnx)......
  • Apipost自动化测试使用教程
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,研发......
  • SpringBoot 实现大文件上传下载、分片、断点续传教程
    WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。大文件上传实现思路:分片: 按照自定义缓冲区大小,将大文件分成多个小文件片段。断点续传: 根据分片数量,给每个小文件通过循环起对应名称,当文件下载中断在续传时,判断小文件名称若存在......