unity热更新新方案,ILRuntime
Posted Hunter_2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity热更新新方案,ILRuntime相关的知识,希望对你有一定的参考价值。
ILRuntime 是一个独立的、跨平台的 .NET Runtime,可用于在 Unity 中实现热更功能。使用 ILRuntime,您可以在游戏运行时加载和执行 C# 脚本,而不需要重新编译整个项目。
以下是一些使用 ILRuntime 的基本步骤:
在 Unity Asset Store 中下载 ILRuntime 插件,并将其导入到 Unity 项目中。
使用 Unity 中的 ILRuntime 菜单生成一个适配器程序集,该适配器程序集包含了 Unity 引擎中的所有 C# 类型,并将其注册到 ILRuntime 中。
编写一个启动脚本,用于加载和执行 C# 脚本。在该脚本中,您需要完成以下任务:
加载所有需要热更的程序集。
创建一个 ILRuntime 的 AppDomain 实例,用于加载和执行 C# 脚本。
将适配器程序集注册到 ILRuntime 的 AppDomain 中。
加载并执行第一个 C# 入口脚本。
编写需要热更的 C# 脚本,并将它们打包为一个独立的 DLL 程序集。
将 DLL 程序集上传到服务器,并在游戏运行时从服务器下载并加载这些 DLL 程序集。
在需要执行热更脚本的地方调用 ILRuntime 的 Invoke 方法,并传递需要执行的方法名和参数列表。
在使用 ILRuntime 时,需要注意以下几点:
不支持所有 .NET 类型和功能。某些特定的类型和功能可能需要特殊处理或不支持。
使用 ILRuntime 的热更功能会带来一些性能损失,因为需要额外的反射和动态编译操作。因此,需要根据具体情况权衡利弊并进行适当的优化。
使用 ILRuntime 需要一定的技术储备,需要对 C#、IL、反射等方面有一定的了解。
ILRuntime 的官方文档中有更详细的教程和示例,您可以参考它们来学习如何在 Unity 中使用 ILRuntime。
以下是一个使用 ILRuntime 实现热更功能的示例:
首先,在 Unity 中安装 ILRuntime 插件,并创建一个名为 HotFix 的空场景。
创建一个名为 HotFixManager 的 C# 脚本,并将其挂载到场景中的一个空 GameObject 上。在该脚本中,您需要完成以下任务:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Generated;
public class HotFixManager : MonoBehaviour
// ILRuntime AppDomain 实例
private ILRuntime.Runtime.Enviorment.AppDomain _appDomain;
// 热更 DLL 文件路径
private string _dllPath = Application.persistentDataPath + "/HotFix.dll";
void Start()
// 初始化 ILRuntime AppDomain 实例
_appDomain = new ILRuntime.Runtime.Enviorment.AppDomain();
// 注册适配器程序集
_appDomain.RegisterCrossBindingAdaptor(new MonoBehaviourAdapter());
// 加载热更 DLL 文件
byte[] dllBytes = File.ReadAllBytes(_dllPath);
MemoryStream dllStream = new MemoryStream(dllBytes);
_appDomain.LoadAssembly(dllStream, null, new Mono.Cecil.Pdb.PdbReaderProvider());
// 执行热更代码
_appDomain.Invoke("HotFix.Test", "Run", null, null);
void OnDestroy()
// 释放 ILRuntime AppDomain 实例
_appDomain = null;
在上面的代码中,我们首先创建了一个 ILRuntime AppDomain 实例,并注册了一个 MonoBehaviourAdapter 适配器程序集,用于将 Unity 引擎中的 MonoBehaviour 类型注册到 ILRuntime 中。然后,我们加载了热更 DLL 文件,并执行了其中的 Test.Run 方法。
创建一个名为 Test 的 C# 脚本,并将其打包为一个独立的 DLL 程序集。在该脚本中,您需要编写需要热更的代码。以下是一个简单的示例:
using System;
using UnityEngine;
namespace HotFix
public class Test
public static void Run()
Debug.Log("Hello, ILRuntime!");
在 Unity 编辑器中,将 Test 脚本打包为一个独立的 DLL 程序集,并将其放在 HotFix 资源文件夹中。
在 Unity 编辑器中,选择 Build Settings,将平台选择为 android 或 ios,并点击 Player Settings,进入 Other Settings 面板。在该面板中,将 Scripting Runtime Version 设置为 .NET 4.x Equivalent,并将 Api Compatibility Level 设置为 .NET Standard 2.0。
构建项目并在移动设备上运行。在运行时,Unity 将从磁盘上的 HotFix.dll 文件加载并执行其中的 Test.Run 方法,从而实现热更功能。
以上代码仅供参考,实际使用中需要根据具体情
unity-ilruntime热更新
title: unity-ilruntime热更新
categories: Unity3d
tags: [unity, ilruntime, 热更新]
date: 2022-07-10 12:22:04
comments: false
mathjax: true
toc: true
unity-ilruntime热更新
前篇
-
官网
-
github - https://github.com/Ourpalm/ILRuntime
-
中文官网 - https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html
-
demo - https://github.com/Ourpalm/ILRuntimeU3D/
-
-
Unity 接入 ILRuntime 热更方案 - https://www.jianshu.com/p/e7283e1ed86a
-
Unity ILRuntime热更框架保姆级教程(一) - https://zhuanlan.zhihu.com/p/495487812
-
临上线项目使用ILRuntime热更 - https://blog.51cto.com/zhaoqingqing/3146140
-
ILRuntime来实现热更新的优与劣 - http://ourpalm.github.io/ILRuntime/public/v1/guide/tutorial.html
-
关于热更新,大家现在都是怎么实现的? - https://answer.uwa4d.com/question/5a9fc420d35eb22c10a0a365
-
ILRuntime:用寄存器模式吊打Lua - https://zhuanlan.zhihu.com/p/538437458
从 0 运行 helloworld
这里使用的 unity 版本为 2019.4.38f1
主要参考: Unity ILRuntime热更框架保姆级教程(一) - https://zhuanlan.zhihu.com/p/495487812
前置条件
-
安装 .net4.6.x 的开发包
地址: https://dotnet.microsoft.com/en-us/download/visual-studio-sdks,
-
安装 rider 编辑器
用于编辑 热更工程 代码
步骤
-
创建一个新工程 TestILRuntime
edit -> project settings -> player, 修改 .net 版本为 4.x, 勾选上 allow unsafe code
-
git 拉取 https://github.com/Ourpalm/ILRuntimeU3D/ 项目, 并将 Assets 目录下的 ILRuntime,Plugins,Samples,StreamingAssets 这几个目录拷贝到新工程的 Assets 下
-
使用 rider 打开热更工程修改打码测试
-
热更工程目录 Assets\\Samples\\ILRuntime\\2.0.2\\Demo\\HotFix_Project~ (unity 编辑器忽略了 ~ 结尾的文件夹)
-
可能会遇到 .net 对应版本没安装的情况
右键 模块 -> properties -> application -> target framework, 选择已有的版本即可 (最好安装上工程要求的版本 .net 4.6.x)
-
-
-
修改代码测试一下
-
以 Assets/Samples/ILRuntime/2.0.2/Demo/_Scenes/Examples/01_HelloWorld.unity 场景为例, 里面就挂了一个 01_HelloWorld/HelloWorld.cs 测试脚本, 里面加载了 Assets/StreamingAssets/HotFix_Project.dll 文件, 也就是 热更工程 HotFix_Project~ 构建出来的库, 加载完后调用了
OnHotFixLoaded
方法调用测试代码void OnHotFixLoaded() //HelloWorld,第一次方法调用 appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest", null, null);
-
修改 热更工程 中的对应的方法
然后构建 dll 库
导出文件 Assets/StreamingAssets/HotFix_Project.dll
-
可以从模块配置中看到 导出目录 和 编译宏 等编译配置
-
-
-
启动 unity
成功看到修改后的内容
以上是关于unity热更新新方案,ILRuntime的主要内容,如果未能解决你的问题,请参考以下文章