欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Unity 热更新学习记录之—— HybridCLR】HybridCLR(1)安装配置环境、 打包配置、 热更新功能效果测试(包括详细代码)

【Unity 热更新学习记录之—— HybridCLR】HybridCLR(1)安装配置环境、 打包配置、 热更新功能效果测试(包括详细代码)

2025/6/21 0:44:27 来源:https://blog.csdn.net/qq_43036676/article/details/148763946  浏览:    关键词:【Unity 热更新学习记录之—— HybridCLR】HybridCLR(1)安装配置环境、 打包配置、 热更新功能效果测试(包括详细代码)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、HybridCLR是什么?
  • 二、安装配置环境
    • 1.安装插件
    • 2.安装
    • 3.创建配置 HotUpdate 热更新模块
  • 三、代码部分
    • 1.ConsoleToScreen
    • 2.Hello
    • 3.LoadDll
  • 四、打包配置
    • 1.生成热更新文件
    • 2.更换热更新文件
    • 3. 运行效果
  • 五、测试热更新
    • 1.生成热更新文件
  • 总结


前言

该文章解决的问题:

  1. HybridCLR是什么
  2. 在unity中安装配置HybridCLR环境
  3. HybridCLR如何在Unity中实现热更新
  4. HybridCLR打包配置
  5. 实际效果测试

一、HybridCLR是什么?

  1. 基础概念
    HybridCLR 是一个基于 Unity 的全平台原生 C# 热更新解决方案,它通过扩展 Unity 的 IL2CPP 技术实现,允许在运行时动态加载和执行 C# 代码。

  2. 核心特性
    *原生执行 - 不依赖解释器或虚拟机,直接运行原生代码
    *完整C#支持 - 支持几乎所有C#特性,包括泛型、反射、async/await等
    *零学习成本 - 使用标准C#开发,无需额外语言
    *高性能 - 接近原生代码的执行效率
    *全平台支持 - 支持Android、iOS、PC等所有IL2CPP支持的平台

  3. 支持的Unity版本
    支持2019.4.x、2020.3.x、2021.3.x、2022.3.x、6000.x.y 中任一版本。推荐安装2019.4.40、2020.3.26+、2021.3.x、2022.3.x、6000.x.y版本。

注意:

  • 如果你的版本为 2019.4.0-2019.4.39,需要先切换到2019.4.40版本完成HybridCLR安装,再切换回当前版本。
  • 如果你的版本为 2020.3.0-2020.3.25, 在Installer中完成安装后,从2020.3.26+任一版本的安装目录复制2020.3.x/Editor/Data/il2cpp/external替换 {project}/HybridCLRData/LocalIl2CppData-{platform}/il2cpp/external。
  • 其他版本的均不支持。

二、安装配置环境

1.安装插件

首先,找到Windows – Package Manager ,选择下图中所示的内容,输入git地址:https://gitee.com/focus-creative-games/hybridclr_unity.git
在这里插入图片描述

2.安装

在菜单栏中找到下图所示的HybridCLR选项卡,并且进行安装。
在这里插入图片描述
在这里插入图片描述

3.创建配置 HotUpdate 热更新模块

在Assets中右键,选择Create – Assembly Definition,这时我们就创建了一个HotUpdate 组件。
在这里插入图片描述
在这里插入图片描述
设置不自动引用剩余所有assembly,包括热更新程序集,否则很容易就出现失误引用热更新程序集导致打包失败的情况。
在这里插入图片描述
打开菜单 HybridCLR/Settings, 在Hot Update Assemblies配置项中添加HotUpdate程序集。
在这里插入图片描述
配置PlayerSettings。
在这里插入图片描述
注意:如果你用的hybridclr包低于v4.0.0版本,需要关闭增量式GC(Use Incremental GC) 选项。

如何查看插件版本号?
在这里插入图片描述

三、代码部分

1.ConsoleToScreen

这个脚本用来处理将日志输出转为屏幕UI输出。将该脚本挂载到场景中的物体上。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ConsoleToScreen : MonoBehaviour
{const int maxLines = 50;const int maxLineLength = 120;private string _logStr = "";private readonly List<string> _lines = new List<string>();public int fontSize = 15;void OnEnable() { Application.logMessageReceived += Log; }void OnDisable() { Application.logMessageReceived -= Log; }public void Log(string logString, string stackTrace, LogType type){foreach (var line in logString.Split('\n')){if (line.Length <= maxLineLength){_lines.Add(line);continue;}var lineCount = line.Length / maxLineLength + 1;for (int i = 0; i < lineCount; i++){if ((i + 1) * maxLineLength <= line.Length){_lines.Add(line.Substring(i * maxLineLength, maxLineLength));}else{_lines.Add(line.Substring(i * maxLineLength, line.Length - i * maxLineLength));}}}if (_lines.Count > maxLines){_lines.RemoveRange(0, _lines.Count - maxLines);}_logStr = string.Join("\n", _lines);}void OnGUI(){GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity,new Vector3(Screen.width / 1200.0f, Screen.height / 800.0f, 1.0f));GUI.Label(new Rect(10, 10, 800, 370), _logStr, new GUIStyle() { fontSize = Math.Max(10, fontSize) });}
}

2.Hello

该脚本是用来进行热更新方法调用,并且进行效果输出的。

using System.Collections;
using UnityEngine;public class Hello
{public static void Run(){Debug.Log("Hello, My Hybridclr Finished");}
}

3.LoadDll

该脚本用来加载热更新程序集,并且调用程序集方法。

using System;
using System.IO;
using System.Linq;
using System.Reflection;
using UnityEngine;public class LoadDll : MonoBehaviour
{void Start(){// Editor环境下,HotUpdate.dll.bytes已经被自动加载,不需要加载,重复加载反而会出问题。
#if !UNITY_EDITORAssembly hotUpdateAss = Assembly.Load(File.ReadAllBytes($"{Application.streamingAssetsPath}/HotUpdate.dll.bytes"));
#else// Editor下无需加载,直接查找获得HotUpdate程序集Assembly hotUpdateAss = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "HotUpdate");
#endifType type = hotUpdateAss.GetType("Hello");type.GetMethod("Run").Invoke(null, null);}}

四、打包配置

1.生成热更新文件

生成热更新文件第一次选择all,后面再次更新的时候使用CompileDll对热更新文件进行更新即可。
在这里插入图片描述

2.更换热更新文件

  • 将 {proj} /HybridCLRData/HotUpdateDlls/StandaloneWindows64(MacOS下为StandaloneMacXxx)目录下的HotUpdate.dll复制到Assets/StreamingAssets/HotUpdate.dll.bytes。
  • 注意:要加**.bytes**后缀!!!

3. 运行效果

然后就可以打包并运行,查看效果了!最后,成功输出,调用成功!
在这里插入图片描述

五、测试热更新

1.生成热更新文件

  • 修改Assets/HotUpdate/Hello.cs的Run函数中Debug.Log(“Hello, HybridCLR”);代码,改成Debug.Log(“Hello, My Hybridclr Finished”);
  • 运行菜单命令HybridCLR/CompileDll/ActiveBulidTarget重新编译热更新代码。
    在这里插入图片描述
  • 将{proj}/HybridCLRData/HotUpdateDlls/StandaloneWindows64 (MacOS下为StandaloneMacXxx)目录下的HotUpdate.dll复制为刚才的打包输出目录的 XXX_Data/StreamingAssets/HotUpdate.dll.bytes。
  • 重新运行程序,会发现屏幕中显示Hello, My Hybridclr Finished,表示热更新代码生效了!
    在这里插入图片描述

总结

1、官方文档:hybridclr官方配置文档

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词