Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World

这篇具有很好参考价值的文章主要介绍了Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

最近又新接触了一种unity热更的解决方案——HybridCLR,自称是:特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案
接下来我们就来一起学习下。
下面是官方文档的链接,一切以官方为主:HybridCLR


一、HybridCLR是什么?

HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成AOT+Interpreter 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以AOT+interpreter混合模式执行,从底层彻底支持了热更新。

HybridCLR不仅支持传统的全解释执行模式,还开创性地实现了 Differential Hybrid Execution(DHE) 差分混合执行技术。即可以对AOT dll任意增删改,会智能地让变化或者新增的类和函数以interpreter模式运行,但未改动的类和函数以AOT方式运行,让热更新的游戏逻辑的运行性能基本达到原生AOT的水平。

我自己理解的就是:一种基于C#的热更技术,完美支持C#原生,不需要写额外的适配器啥的,直接就能用,就是把il2cpp改了下。

二、使用步骤

环境配置

unity安装的时候一定要安装IL2cpp部分,Windows Build Support(IL2CPP)或Mac Build Support(IL2CPP)。
现在支持的unity 版本:2019.4.40、2020.3.26+、2021.3.0+

我用的unity 版本是2021.3.23


Windows
Win下需要安装visual studio 2019或更高版本。安装时至少要包含 使用Unity的游戏开发 和 使用c++的游戏开发 组件。
安装git
Mac
要求MacOS版本 >= 12,xcode版本 >= 13,例如xcode 13.4.1, macos 12.4。
安装 git
安装cmake

创建项目

创建ConsoleToScreen脚本,方便在屏幕上看日志。

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) });
    }
}


把这个脚本挂载到空场景的空物体上,在Build Settings中添加这个场景到打包场景列表

创建 HotUpdate 热更新模块

创建 Assets/HotUpdate 目录
在目录下 右键 Create/Assembly Definition,创建一个名为HotUpdate的程序集模块

安装和配置HybridCLR

Windows——>Package Manager,打开包管理器,Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World
填入https://gitee.com/focus-creative-games/hybridclr_unity.git或https://github.com/focus-creative-games/hybridclr_unity.git
安装包成功后,打开HybridCLR——>Installer

配置HybridCLR

Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello WorldPlayerSettings的配置
Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World

创建热更脚本

Assets/HotUpdate/Hello.cs
这个脚本内容是需要热更的,代码如下:

using System.Collections;
using UnityEngine;

public class Hello
{
    public static void Run()
    {
        Debug.Log("Hello, HybridCLR");
    }
}

加载热更新程序集

创建Assets/LoadDll.cs脚本,然后在main场景中创建一个GameObject对象,挂载LoadDll脚本。

using HybridCLR;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;

public class LoadDll : MonoBehaviour
{

    void Start()
    {
      // Editor环境下,HotUpdate.dll.bytes已经被自动加载,不需要加载,重复加载反而会出问题。
#if !UNITY_EDITOR
        Assembly 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");
#endif
 Type type = hotUpdateAss.GetType("Hello");
        type.GetMethod("Run").Invoke(null, null);
    }
}

运行菜单 HybridCLR/Generate/All 进行必要的生成操作
这是用来生成要热更的脚本的dll文件的
将{proj}/HybridCLRData/HotUpdateDlls/StandaloneWindows64(MacOS下为StandaloneMacXxx)目录下的HotUpdate.dll复制到Assets/StreamingAssets/HotUpdate.dll.bytes,注意,要加.bytes后缀!!
然后就可以打包了,运行之后的结果是这样的
Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World

测试热更新

修改Assets/HotUpdate/Hello.cs的Run函数中Debug.Log(“Hello, HybridCLR”);代码,改成Debug.Log(“Hello, World”);。
运行菜单命令HybridCLR/CompileDll/ActiveBulidTarget重新编译热更新代码。
将{proj}/HybridCLRData/HotUpdateDlls/StandaloneWindows64(MacOS下为StandaloneMacXxx)目录下的HotUpdate.dll复制为刚才的打包输出目录的 XXX_Data/StreamingAssets/HotUpdate.dll.bytes。
重新运行程序
结果如下
Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World
热更成功!


总结

欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~

声明:本博文章若非特殊注明皆为原创原文链接
https://blog.csdn.net/Wrinkle2017/article/details/126662423
————————————————————————————————

💢💢版权声明

版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明
文章来源地址https://www.toymoban.com/news/detail-469340.html

到了这里,关于Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity热更模块基于 HybridCLR + Addressable

    代码地址: GitHub - ManoKing/FFramework: 基于HybridCLR + Addressable的热更新框架,提供例子基于QFramework+URP开发 基于HybridCLR + Addressable的热更新框架,提供例子基于QFramework+URP开发 - GitHub - ManoKing/FFramework: 基于HybridCLR + Addressable的热更新框架,提供例子基于QFramework+URP开发 https://github.

    2023年04月14日
    浏览(27)
  • Unity 之 Addressable可寻址系统 -- HybridCLR(华佗)+Addressable实现资源脚本全热更 -- 实战(二)

    在Unity中,结合 Addressable Asset System (简称:AA)和 HybridCLR 来实现热更新资源和脚本的控制。 AA 是Unity的一个强大的资源管理系统,可以用于动态加载和更新资源。HybridCLR是一个用于在Unity中运行C#脚本的工具,可以实现热更新脚本的功能。 使用版本: Unity 2022.3.8 Addressables 1.21

    2024年01月24日
    浏览(30)
  • [Unity实战][C#实战]HybridCLR(wolong)卧龙C#热更框架v2.0.x-Unity2020.3.21f1

    官网介绍 HybridCLR(代号wolong)是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。 HybridCLR扩充了il2cpp的代码,使它由纯AOT (opens new window)runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在

    2024年02月15日
    浏览(24)
  • HyBridCLR(华佗热更)踩坑记录

            官方说明:HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以 AOT+interpreter 混合模式执行,从底层彻底支持了

    2024年01月25日
    浏览(28)
  • Unity_热更方案

    热更是指在游戏已经发布和运行后,仍然能够更新游戏内容、修复错误或添加新功能 具体的来说有几种方法可以实现: 这种方法比较基础,但对于一些小型项目或原型来说,是一种有效的热更方式 这是之前比较通用的一种方法 Lua热更是针对脚本的更新,需要有一个稳定的热

    2024年02月07日
    浏览(43)
  • GameFramework 框架详解之 如何接入热更框架HybridCLR

    HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的c#热更新方案 GameFramework是一个非常出色完整的基于Unity引擎的游戏框架,里面包含了非常多的模块,封装非常完整。 以前市面上的热更大多数都是Lua为主,后来出了一个ILRuntime的C#热更框架,虽然性能差了点,但

    2024年02月07日
    浏览(29)
  • 【UGF】GameFramework接入HybridCLR(wolong)卧龙C#热更框架

    HybridCLR的推广已经做得相当好了,而且热更领域突然杀出一匹黑马,热度很高,不再多做介绍,可以点击进入HybridCLR开源地址了解详情。 在此之前用过tolua和xlua热更框架, 因为C#开发方式实在太爽,想支持热更又不想使用弱类型语言,于是对ILRuntime和HybridCLR进行了评估,了解

    2023年04月11日
    浏览(64)
  • ET7.2+最新版本HybridCLR(huatuo、wolong)热更教程2

    距离《ET7.0+HybridCLR(huatuo)热更教程》这篇教程时间过了两个多月了,特别HybridCLR版本迭代很快,ET官方也升级到最新的7.2版本了。很多工具流都变了,因此用最新的ET版本重新跑了接入HybridCLR流程,记录一些变动操作内容,文章结尾附带github完整的项目工程。 首先去官网下载最

    2023年04月10日
    浏览(14)
  • 【Unity使用addressables制作资源热更+实时动态热更基本记录】

    一、Addressables基础操作教程 1、下载Addressables插件 点击菜单Window / Package Manager,打开插件包管理界面,搜索addressables Addressables的打包方式其实也是AssetBundle格式,只是在此基础上做了一层封装,方便进行管理(比如打包、加载、依赖等)。而我们知道,没有加密的AssetBundle是

    2024年02月10日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包