Unity 搭建ILRuntime开发环境

news2024/12/28 0:17:47

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的开发习惯,上手很快。

图1.1-1:热更新原理图

ILRuntime 开发环境搭建

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

图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();

public class ILRuntimeWrapper : UnitySingleton<ILRuntimeWrapper>

{

  private bool isGameStart = false;

  AppDomain appdomain; //

  System.IO.MemoryStream fs;

  System.IO.MemoryStream p;

  public override void Awake() {

  base.Awake();

  this.isGameStart = false;

  this.appdomain = new     ILRuntime.Runtime.Enviorment.AppDomain();

 }

}

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

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

图1.1-3:热更项目位置

图1.1-4:依赖Unity的Dll

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

图1.1-5:如何找到依赖的Unity的Dll的路径

图1.1-6

图1.1-7

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

图1.1-8:配置输出路径到StreammingAssets/Hotfix下

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

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

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

相关文章

【财务】FMS财务管理系统---存货管理

前一篇文章介绍了付款相关的内容&#xff0c;本文中笔者继续介绍FMS财务管理系统的设计&#xff0c;今天是关于存货管理的介绍。 财务存货管理应该就是针对公司的生产原材料、物料、成品、加工品的数量与金额的管控。 在前面也介绍了&#xff0c;存货属于公司的资产&#xff0…

纯Java实现一个网页版的Xshell

前言 最近由于项目需求&#xff0c;项目中需要实现一个WebSSH连接终端的功能&#xff0c;由于自己第一次做这类型功能&#xff0c;所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用&#xff0c;当时看到了很多这方面的项目&#xff0c;例如&#xff1a;GateOne、webss…

微信小程序实现身份证识别-orc

项目中有一个识别身份证的需求&#xff0c;经过调研&#xff0c;最后决定使用微信小程序orc插件进行开发。 一:首先登录小程序公众平台。 1:进入设置> 第三方设置。 2:添加ocr插件。 3:添加完后&#xff0c;需要领取免费额度&#xff0c;100次/天。 https://fuwu.weixin…

SpringBoot+Vue实现后疫情时代下的旅游管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Linux高级之日志管理

Linux高级之日志管理1.系统常用日志2.日志服务的稳定性3.自定义日志服务4.日志轮替5.内存日志1.系统常用日志 日志文件用于记录linux系统的各种运行信息的文件&#xff0c;相当于linux主机的日记&#xff0c;不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件…

React学习04-React_Ajax

写在前面 React本身只关注于界面&#xff0c;并不包含发送ajax请求的代码前端应用需要通过ajax请求与后台进行交互&#xff08;json数据&#xff09;React应用中需要集成第三方ajax库&#xff08;或自己封装&#xff09; 常用的ajax请求库 jQuery&#xff1a;比较重&#xf…

C|%输出各种类型的值总结

参考&#xff1a; C语音输出各种类型数据的方式 c语言中%s的用法 %d&#xff1a;十进制有符号整数 输出的数据范围是 signed int 的范围&#xff0c;即 0x80000000 ~ 0x7FFFFFFF&#xff08;-2147483648~2147483647&#xff09; %u&#xff1a;十进制无符号整数 输出范围0~0xF…

JVM-垃圾回收

1、GC分类 &#xff08;1&#xff09;部分收集&#xff08;Partial GC&#xff09; 新生代收集&#xff08;Minor GC/Young GC&#xff09;&#xff1a;只对新生代进行垃圾收集。&#xff08;读音[ˈmaɪnə(r)]&#xff09; 老年代收集&#xff08;Major GC/Old GC&#xff09…

基于SpringBoot+mybatis+mysql+html家具城进销存管理系统

基于SpringBootmybatismysqlhtml家具城进销存管理系统一、系统介绍二、功能展示1.用户登陆2.进货管理(货物管理员)3.退货管理&#xff08;货物管理员&#xff09;4.商品销售、商品销售退货(商品管理员)5.管理商品、商品类别、供应商、客户&#xff08;商品管理员&#xff09;6.…

DirtyPipe(CVE-2022-0847)漏洞分析

前言 CVE-2022-0847 DirtyPipe脏管道漏洞是Linux内核中的一个漏洞&#xff0c;该漏洞允许写只读文件&#xff0c;从而导致提权。 调试环境 ubuntu 20.04Linux-5.16.10qemu-system-x86_64 4.2.1 漏洞验证 首先创建一个只读文件foo.txt&#xff0c;并且正常情况下是无法修改…

微信小程序集成three.js--6.利用raycastor选择对象

1.实例演示 小程序集成Three.js&#xff0c;利用raycaster实现对象的2.源码 &#xff08;1&#xff09;引入库并声明变量 import * as THREE from ../../libs/three.weapp.js import {OrbitControls } from ../../jsm/controls/OrbitControls const app getApp()// 声明一个…

知识付费系统源码搭建流程讲解、代码分析

知识付费系统是现在多数教培机构优先考虑的线上教学系统&#xff0c;而很多机构自身有技术人员常驻&#xff0c;所以不需要再花费资金去直接购买搭建好的成品系统&#xff0c;转而直接购买源码后&#xff0c;自行搭建配置。 目前&#xff0c;知识付费系统是许多教培机构转型的首…

BOSS直聘自动投简历聊天机器人的实现过程

这两年疫情&#xff0c;公司业务越来越差&#xff0c;必须得准备后路了&#xff0c;每天睡前都会在直聘上打一遍招呼&#xff0c;一直到打哈欠有睡意为止...,这样持续了一周&#xff0c;发现很难坚持&#xff0c;身为一名资深蜘蛛侠&#xff0c;怎么能这样下去呢&#xff1f;于…

Jmeter二次开发实现rsa加密

jmeter函数助手提供了大量的函数&#xff0c;像 counter、digest、random、split、strLen&#xff0c;这些函数在接口测试、性能测试中大量被使用&#xff0c;但是大家在实际工作&#xff0c;形形色色的测试需求不同&#xff0c;导致jmeter自带或者扩展插件给我们提供的函数无法…

LeetCode —— 二叉树

持续更新中................ 二叉树的定义 public class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode() {}public TreeNode(int val) {this.val val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.r…

nginx看这一篇文章就够了

一、Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;Рамблер&#xff09;开发的。其特点是占有内存少&#xff0c…

智能机柜PDU助力中小型数据中心机房末端配电系统建设

数据中心作为我国已确定“新基建”的七大领域之一&#xff0c;在国民经济和社会发展中扮演中越来越重要的角色&#xff0c;成为各行各业的关键基础设施&#xff0c;为各产业转型升级提供了重要支撑。据相关数据显示&#xff0c;2018年至今&#xff0c;我国的数据中心市场年均复…

项目管理工具dhtmlxGantt甘特图入门教程(四):可见性和布局视图大小设置

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理控件应用程序的所有需求&#xff0c;是完善的甘特图图表库。这篇文章给大家讲解 dhtmlxGantt的可见性组、布局大小和隐藏父布局视图。 DhtmlxGantt正版试用下载&#xff08;qun&…

【BP靶场portswigger-服务端3】目录遍历漏洞-6个实验(全)

目录 一、目录遍历 1、意义 二、通过目录遍历阅读任意文件 1、示例 实验1&#xff1a;文件路径遍历&#xff08;简单&#xff09; 三、利用文件路径遍历漏洞的常见障碍 1、对于../等的限制 实验2&#xff1a;文件路径遍历&#xff08;用绝对路径旁路阻止遍历序列&#xf…

相距两千多公里,仅仅数月,从相亲走到结婚 | 2022年复盘日记

&#x1f468;‍&#x1f393;作者&#xff1a;bug菌 &#x1f389;简介&#xff1a;CSDN、掘金等社区优质创作者&#xff0c;全网合计7w粉&#xff0c;对一切技术都感兴趣&#xff0c;重心偏Java方向&#xff0c;目前运营公众号「猿圈奇妙屋」&#xff0c;欢迎小伙伴们的加入&…