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(* ̄▽ ̄*)ブ

相关内容

热门资讯

文峰股份:股东郑素贞所持全部公... 文峰股份公告,近日,公司收到青岛中院《拍卖通知书(变卖)》,公司持股5%以上股东郑素贞持有的公司12...
美亚科技IPO进行时:票务业务... 广东美亚旅游科技集团股份有限公司(美亚科技)近日向北交所提交了第三轮问询回复,继续推进其IPO进程。...
权威发布丨25条新政出台!我市... 7月29日,烟台市人民政府新闻办公室举行新闻发布会。烟台市住房和城乡建设局党组书记、局长孙玉荣介绍加...
AI成民营银行下一个十年的 关... [ 2024年民营银行整体业绩承压明显。19家银行合计净利润187.76亿元,同比下滑8.14%。 ...
丰林集团股价微跌0.87% 子... 丰林集团股价报2.29元,较前一交易日下跌0.02元,跌幅0.87%。盘中波动区间为2.25元至2....
长安汽车:中国长安汽车集团合计... 长安汽车 视觉中国 资料图 中国长安汽车集团有限公司(下称“中国长安汽车集团”)成立后,A股上市公司...
机构席位卖出456.92万 北... 每经讯,2025年7月29日,北交所上市公司天润科技(430564,收盘价:27.16元)登上龙虎榜...
小麦集中收购即将过半 政策收储... 夏粮小麦集中收购期即将过半,小麦市场供需博弈依旧僵持。当前,政策稳价、稳市意愿仍然较强,但面粉消费需...
珠江啤酒高层变动,“华南王”何... 升任董事长一个月后,黄文胜辞去了珠江啤酒总经理一职。 近日,珠江啤酒披露公告,称因工作调整,黄文胜申...
苹果在美开“制造学院”,AI、... IT之家 7 月 29 日消息,苹果公司宣布,将在底特律开设全新的苹果制造学院(Apple Manu...
首家民营银行半年报,民商银行净... 近日,温州民商银行股份有限公司(下称民商银行)发布了2025年半年度报告,这也是首家发布半年业绩的民...
美股盘前暴跌28%!诺和诺德任... 29日周二,丹麦制药巨头诺和诺德在减肥药销售放缓导致利润预警后,提拔国际业务负责人Maziar Mi...
【广发•早间速递】聚焦再平衡,... 来源:广发证券研究 注:音频如有歧义以研究报告内容为准 研究精选 宏观:6月中游制造行业利润分化 ...
理想汽车,突然直线大跌!中概新... 今晚(7月29日),美股高开后有所回落,截至发稿,道指飘绿,纳指与标普500指数飘红。 个股方面,美...
宝安科创“兽”群图鉴更新!一医... 宝安制造业沃土再添科创标杆!近日,在深圳市工业和信息化局、深圳市中小企业服务局指导举办的2025中国...
轩竹生物:研发人数锐减,融资近... 轩竹生物科技股份有限公司(简称“轩竹生物”),这家专注于消化、肿瘤及非酒精性脂肪肝炎等重大疾病领域的...
爱柯迪涨5.52%,西南证券二... 今日爱柯迪(600933)涨5.52%,收盘报17.0元。 2025年5月2日,西南证券研究员郑连声...
中原高速连跌5天,南方基金旗下... 7月29日,中原高速连续5个交易日下跌,区间累计跌幅-6.76%。河南中原高速公路股份有限公司是经河...
比特币“霸主”地位受威胁,山寨... 比特币的几个月持续上涨,使其价格远超疫情时代的高潮。然而,随着比特币的主流化,投资者开始寻找下一个大...
斥资近8亿元入主4年半 许广彬... 东方材料7月29日晚间公告,许广彬因个人原因申请辞去公司董事长等职务,但辞职后继续担任公司董事。许广...