HybridCLR(代号wolong)/huatuo新一代热更新方案
创始人
2025-05-28 10:49:58
0

前言

huatuo 现已改名 HybridCLR, 而原来的huatuo仓库由途游接着维护

本文章主要以HybridCLR仓库为例说明:focus creative games(代码哲学) · GitHub

 hybridclr  仓库为核心仓库
 il2cpp_plus 仓库为改造过的il2cpp仓库添加解释核心仓库的代码指令
 hybridclr_trial 仓库为示例仓库

Unity IL2CPP 技术原理与AOT

在此之前,我们先了解下Unity的发展:

  • 阶段一: C#的出现;
            微软开发出一套符合自己的标准出来,于是在Windows系列的平台上把.net的标准开发出来,就是说我们开发者只需要开发出来符合.net 字节码的标准代码, 我们就可以让我们的代码在.net上运行起来;
  • 阶段二: Mono项目; 
            为了实现跨平台(Linux, Windows, Android,MacOS等平台), 于是就有了.net虚拟机的出现,结合.net开发环境,造就了Mono项目;
  • 阶段三: Unity采用了Mono方案实现了跨平台
  • 阶段四: IL2CPP 项目;
            为什么会出现IL2CPP 项目, Unity发现使用Mono出现了那些问题?
    a: 程序的执行效率: 编写出来的.net字节码是基于.net虚拟机上运行,再编译成二进制机器指令;
    b: 针对不同的平台,Unity就要把VM都给移植一遍,同时解决VM里面发现的bug,这非常耗时耗力。而且有些平台无法进行移植;
    c: 因为Mono的授权受限,Unity无法升级Mono版本导致一些新的C#特性无法使用;

综上所了解, Unity独自开发出了一条新技术路线就是所谓的 IL2CPP,根据官方的实验数据,换成IL2CPP以后,程序的运行效率有了1.5-2.0倍的提升;

详细介绍参考: Unity将来时:IL2CPP是什么? - 知乎

这里主要说两个知识点:

  1. 什么是IL?
    IL(Intermediage Language) 中间语言,CLR把C#,java,F#等语言编写的代码都统编译成IL,这样就可以在IL 这一层实现 所有编程语言的统一,vs将编译后的IL存储在程序集中(Dll\exe)l文件中,当打开软件的时候 CLR程序集中的IL 二次编译成机器可识别的语言。
    简单地说:在Unity中,IL和CIL表示的是同一个东西,它是一种属于通用语言架构和.net框架的低阶的编程语言
  2. 什么是CLI?
    CLI(Common Language Infrastructure)通用语言基础架构,CLI是一个开放型的技术规范,它定义了一个语言无关的跨体系结构的运行环境,这使得开发者可以用规范内定义的各种高级语言来开发软件,并且无需修正即可将软件运行在不同的计算机体系结构上.由微软、惠普和英特尔于2000年向ECMA倡议的。最终定义为Ecma335标准。
    简单地说: 特指在.net平台下的IL标准

这时候肯定说这个有什么关联吗?.net是一个程序开发、运行平台,它是CLI的实现,它是要实现让程序源跨语言开发软件、让开发出来的软件跨平台 、跨系统运行。 我画张图就懂其中的道道了

 所以说,.net帮我们把在Unity中开发的C#代码转为符合IL字节码就可以在.net上运行;

那么IL2CPP与上有什么区别呢?
IL2CPP在得到中间语言IL字节码后,使用IL2CPP将他们重新变为静态的编译型语言(C语言,C++语言)的C++代码,然后再由各个平台(xcode,android ndk, windows visual studio等)的C++编译器来编译我们的代码,把我们的代码编程本地的机器指令,直接在os上执行,那么效率上来看肯定比在.net解释执行嘎嘎的快了;

IL2CPP只支持AOT方式,Mono支持AOT,JIT所有方式;
Android平台支持Mono和IL2CPP的所有编译方式;
IOS只支持Mono的Full AOT模式和IL2CPP;

那么什么是AOT呢?
AOT: Ahead of time 离线编译
就是把我们的高级语言➡静态编译型语言➡直接编译成二进制机器指令;

C#作为高级语言包含了GC垃圾回收, 语法特性, 线程等服务,而 c++不提供语言层面的GC垃圾回收,那又引入了一个新的知识点IL2CPP VM;
IL2CPP VM: IL2CPP的虚拟机,个人理解是一个运行库,提供一些服务:GC垃圾回收等,利用IL2CPP编写一些库,来提供这些服务;

最终可以得出一个公式:
Unity IL2CPP =  IL2CPP编译出来的二进制指令+IL2CPP vm(GC,Thread等)

HybridCLR热更新个人理解

目前市面上主流的热更新方案:

  • Lua: 内置Lua虚拟机 + Lua代码
  • ILRuntime: 内置C#的虚拟机 + 解释执行ILRuntime;

内置虚拟机什么意思? 
自己解释执行的一个运行环境,无法直接继承Monobehaviour需要自定义封一层:跨域访问,接口导出都需要开发者自己来处理,都是一件很繁琐的事情,不符合我们标准的Unity开发(拖,拉,拽,哈哈)

HybridCLR到底做了什么事情

IL2CPP runtime环境(IL2CPP VM)编写了一个解释器,解释执行IL代码指令 + 使用的是AOT的数据内存对象

我们对比下IL2CPP和HybridCLR区别
假设: 我们先定义一个struct GameObject数据内存:

C/C++代码 
AddName(GameObject go){
        string a = "test";
        return a + go.ToString();
}

IL代码
AddName(GameObject go){
        string a = "test";
        return a + go.ToString();
}

HybridCLR代码
Extra_AddName_ILFunc(GameObject  obj){
        加载到IL指令:
        {
                定义一个string类型的变量a;
                返回 a + obj.ToString();;
        }
}

得出:
IL2CPP = 数据内存(GameObject) + 代码逻辑(二进制机器指令);
HybridCLR = 数据内存(GameObject) + 代码逻指(二进制机器指令) + IL代码指令解释执行

这就是在HybridCLR热更的项目中,我们可以随意的继承使用我们GameObject,Monobehaviour;
因为这些数据对象在编译AOT的时候,这些类型全部编译进去了;
解释执行IL的new GameObiect 和 new AOT的GameObiect对象是一摸一样的;

HybridCLR优势有哪些?

  1. 直接使用的时候我们的AOT中的内存对象,内存的占用,跨域都没有什么问题; 这点就解决了其他热更项目所无法解决的内存优化,跨域问题,意味着性能提高了
  2. 不用改变我们标准的Unity开发(拖,拉,拽)习惯
  3. 不需要额外写任何特殊代码、没有代码生成,几乎没有限制。

HybridCLR开发环境搭建

快速上手 | Focus Creative GamesFocus Creative Games是一个业内领先的专注于提供游戏行业深度技术解决方案的创新型公司。https://focus-creative-games.github.io/hybridclr/start_up/开发环境准备:

  • 支持2019.4.x、2020.3.x、2021.3.x系列LTS版本
  • Visual Studio 2019 C++ 的程序集;
  • Android NDK:
  • IL2CPP for windows: 安装好测试平台的IL2CPP

HybridCLR环境准备:

 hybridclr  核心仓库, IL代码指令解释执行
 il2cpp_plus il2cpp补丁仓库,不含核心代码是核心代码运行的必要环境
 hybridclr_trial 仓库为示例仓库

FAQ:
常见错误 | Focus Creative GamesFocus Creative Games是一个业内领先的专注于提供游戏行业深度技术解决方案的创新型公司。https://focus-creative-games.github.io/hybridclr/common_errors/#currently-selected-scripting-backend-il2cpp-is-not-installed性能报告

https://focus-creative-games.github.io/hybridclr/benchmark/https://focus-creative-games.github.io/hybridclr/benchmark/


 有兴趣的小伙伴可以关注一波

 o(* ̄▽ ̄*)ブ

相关内容

热门资讯

黄金“不灵了”,高端金饰的溢价... 古法黄金到底能不能走出脱离金价波动的独立溢价 作者:赵心怡 2026年开年,国际金价一路狂飙至近56...
朗迅科技由董事长徐振控制46%... 瑞财经 刘治颖 6月24日,杭州朗迅科技股份有限公司(以下简称:朗迅科技)深主板IPO获受理,保荐机...
两部门:2030年可再生能源制... 【两部门:2030年可再生能源制氢规模达到200万吨】财联社6月25日电,国家发展改革委、国家能源局...
原创 警... 大家好,这里是全球脉冲。 6月16日,日本央行宣布加息25个基点,政策利率上调至1%,创下31年来最...
黄金钻石回收怎么选?上海市场常... 近年来黄金价格持续走高,不少上海市民都有变现家中闲置黄金首饰、投资金条的打算。但市面上回收门店数量众...
专访火山引擎谭待:模型好对Ma... 文 | 邓咏仪 编辑 | 张雨忻 火山引擎总裁谭待 来源:火山引擎 过去三年,火山引擎总裁谭待给团...
女董事长深夜被带走,牵出金融旧... *此图由AI生成 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 大半夜的,一家上市公司董事...
盯盯拍报考港交所上市:出海翻红... 撰稿|贝多 来源|贝多商业&贝多财经 6月22日,盯盯拍(深圳)技术股份有限公司(下称“盯盯拍”)递...
苏州千亿市值上市公司+1! A股“苏州板块”又诞生了一家千亿市值企业。 昨日(6月25日),苏州上市公司永鼎股份股价在昨日涨停的...
芯片股猛拉!600667,一字... 【导读】创业板指一度涨超2%,存储芯片、半导体、电子元器件等方向涨幅居前 中国基金报记者 李智 一起...
分析师:海峡收费与否已不重要 ... 来源:格隆汇APP 格隆汇6月25日|阿曼方面重申,霍尔木兹海峡未来安排不涉及通行费。美国财经网站i...
《内外贸一体化企业评价通则》团... 齐鲁晚报·齐鲁壹点记者 管悦 6月25日,《内外贸一体化企业评价通则》团体标准审查会在济南召开。该标...
提升AI智能体工作流的速度与能... 智能体工作流是一种由AI驱动的软件系统,它通过串联多个模型与外部工具来处理复杂任务,例如分析视频并回...
热搜!又有纸尿裤被曝检出甲酰胺... 来源:市场资讯 (来源:北京商报) 网友:“囤了200多包”。 近日,多个婴幼儿纸尿裤品牌“被检出...
埃森哲内部录音曝光:企业AI使... IT之家 6 月 26 日消息,科技媒体 404Media 昨日(6 月 25 日)发布博文,披露了...
FIBA期待杨瀚森表现 最新实... 北京时间6月25日消息,FIBA国际篮联公布了最新一期世界杯预选赛亚太区球队实力榜,中国男篮排在澳大...
收评:创业板指放量反弹涨2.8... 市场冲高回落后,再度震荡拉升。黄白线分化明显,权重股走势较强。量能明显放大,沪深两市成交额3.59万...
巨头财报引爆A股存储芯片板块,... 当地时间6月24日美股盘后, 美光科技(MU.US)公布截至5月31日的2026财年第三财季财报,业...
银行、消金公司助贷余额增速不得... 近日,中国证券报记者从多位业内人士处独家获悉,5月以来,多地金融监管部门对部分中小银行、消金公司下达...