对性能敏感的场景(如物理计算、AI行为树) 四、xLua 核心原理: 基于Lua虚拟机实现逻辑热更,通过自动生成C#-Lua桥接代码(Wrap文件)实现双向调用。利用Unity的LuaInterface组件实现与引擎API的交互,核心代码(如渲染管线)仍以C#实现。 技术特点: 灵活性强:支持运行时动态替换Lua脚本 生态丰富:可直接使用OpenResty、ToLua等...
首先强调,lua table的内存大小在32位和64位差异很大,并且luajit拥有强大的nan tick技术可以压缩1/3的table内存。这里给对方一点面子就用lua5.3的xlua做测试 首先我们直接使用源码sizeof直接取出来一个Table,得到空table size,没错数据是56B typedefstructTable{CommonHeader;lu_byteflags;/* 1<...
xlua并未考虑过模块化,生成的代码全在全局Assembly-CSharp里,甚至做成partial类与Runtime代码关联,因此你可能需要对这些热更新方案的生成代码做少量调整,才能与热更新配合工作。已经有群友制作了 HybridCLR+xlua 的项目 HybridCLRXlua,已经跑通。没有充分理解的开发者可以借鉴学习。
ToLua和XLua的性能是比较低的,ILRuntime的性能相对要好一些,HybridCLR由于没有虚拟机,所以性能也会高一点 成熟度 端游时代里用ToLua和Xlua的比较多,但如果你到现在还在学习ToLua或者Xlua热更新,那么你的项目可能是一些比较传统的项目,就比如国内的一些MMORPG游戏,这些游戏大多都是从端游时代移植过来的,所以它们的主流热...
类型XluaILRuntimeHybridCLR/原生il2cpp V188+881 V2120+1048 V3184+16824 C188+8824 C2120+10424 C3184+16840 以下是测试类型: 初始化消耗内存 元数据内存 补充元数据内存 加载热更新程序集内存 解释执行过程中产生的内存 与lua、ILRuntime的对象内存大小对比...
目前Unity平台的主流热更新方案xLua、ILRuntime之类都是引入一个第三方VM(Virtual Machine),在VM中解释执行代码,来实现热更新。这里我们只分析使用C#为开发语言的热更新方案。这些热更新方案的VM与IL2CPP是独立的,意味着它们的元数据系统是不相通的,在热更新里新增一个类型是无法被IL2CPP所识别的(例如,通过System.Ac...
热更技术原理:app+脚本解释器+脚本代码,动态执行最新代码,实现热更。 解释器: Lua技术= Lua解释器+Lua脚本; C#= C#解释器+c#脚本 Unity的热更方案: Lua解决方案(如ToLua,xLua等):内置Lua虚拟机+UnityEngine与C#框架的接口导出+Lua代码。 C#解决方案(ILRuntime):内置.net字节码解释器(虚拟机)+解释执行.net字节...
HybridCLRxLua 介绍 HybridCLR(代号wolong)是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案. HybridCLR扩充了il2cpp的代码,使它由纯AOTruntime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles...
本人目前使用过的代码热更方案有XLua和HybridCLR,没用过ILRuntime,目前的项目使用的热更方案是Addressables+HybridCLR,整个热更新的框架由我一手搭建,基本实现了线上Bug无缝修复,用起来还是非常带劲的,在此强烈推荐HybridCLR,至于XLua的总结我可能不会再另外写了。
HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生C#热更方案。 只要简阅官方文档,就会发现项目中接入HybridCLR极其简单,所以在框架中使用HybridCLR热更新并没有做太多的调整,只需要做如下几个简单的步骤即可。 注意,HTFrameworkILHotfix及HTFrameworkXLua可选模块已不再支持与维护,HybridCLR官...