# HybridCLRXlua **Repository Path**: AIGAMESTUDIO.AILHC/HybridCLRXlua ## Basic Information - **Project Name**: HybridCLRXlua - **Description**: HybridCLR融合Xlua - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 47 - **Created**: 2022-09-19 - **Last Updated**: 2022-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HybridCLRxLua [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/ldr123/HybridCLRXlua/blob/main/LICENSE) ![logo](./docs/images/logo.jpg) #### 介绍 **HybridCLR**(代号wolong)是一个**特性完整、零成本、高性能、低内存**的**近乎完美**的Unity全平台原生c#热更方案。 HybridCLR扩充了il2cpp的代码,使它由纯[AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation) runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以**AOT+interpreter**混合模式执行,从底层彻底支持了热更新。更详细的特性、平台支持介绍请看[这里](https://focus-creative-games.github.io/hybridclr/about/#文档)。 **xLua**为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: - 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现; - 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc; - 编辑器下无需生成代码,开发更轻量; 更详细的特性、平台支持介绍请看[这里](https://tencent.github.io/xLua)。 由于热更特性的需求,之前Cocos游戏很多是使用lua或者js来实现热更的,这其中lua的使用率最高,在Unity3d上也有很多热更方案(ToLua,ULua,xLua,ILRuntime等)。综合考虑之下,创建**HybridCLRxLua**工程用于演示在接入HybridCLR的情况下还能正确的使用xLua,这样将更新的粒度切到很细。之前的更新粒度一般是 - 更新APK(IPA) - 更新业务脚本(lua, ilruntime.dll) - 更新资源 而使用**HybridCLRxLua**流程,可以将粒度细分为 - 更新apk(IPA) - 更新HybridCLR hotfix.dll - 更新业务脚本(lua) - 更新资源 有数据显示,更新apk(ipa)对用户的损失可以达到20%+,热更存在的意义就是尽可能减少强更app的可能性。 ## 兼容性 - 支持PC(WIN,MacOS)、Android和iOS版本 - 在2020.3.3、2020.3.33、2020.3.39测试通过,后续会继续测试其他版本 - 目前win,android平台下支持使用2020.3.3导出执行文件,ios不行,只能用2020.3.33或更新版本 ## 重点修改项 - 修改出包流程,与hybridclr_trial相比,简化了出包流程,不需要二次打包即可产出可直接运行的产出。 - 热更dll和lua抛弃assetbundle转由使用二进制文件的方式来达到简化出包流程的目的 - xLua修改 - 将xLua原生代码拆分成两部分,编辑器脚本放在主工程,其他部分放在Hotfix工程 - 修改LuaDLL.cs,原生LuaDLL.cs放在主工程并将namespace修改为其他名称(比如XLuaBase),新的LuaDLL.cs放在Hotfix工程,其中,Hotfix工程里的LuaDLL.cs调用主工程里的函数。 - 修改xLua相关的模板文件(*.tpl.txt),将using LuaCSFunction = XLua.LuaDLL.lua_CSFunction; 全局替换为 using LuaCSFunction = XLuaBase.lua_CSFunction; - 按需生成ReversePInvokeMethodStub函数,根据MonoPInvokeCallback的函数数量生成相应数量的函数(为了尽可能减少出包次数,本工程使用个数*1.5来作为函数数量) - 为非标准版本准备了CopyBuildToolsPath方法,比如在Unity2020.3.3上编译而HybridCLR使用的是2020.3.33的工具包,如果不使用相应版本的编译工具,就会导致编译失败(可能是xlua使用了比较复杂的用法)。 ## 后续计划 - 与官方同步版本 - 提升性能 ## 性能测试 - 性能测试的结论请看[这里](https://www.wolai.com/qEDw9QbvVpWgvRnPDAwVPW) ## 问题及FAQ - 请熟读[HybridCLR常见问题](https://focus-creative-games.github.io/hybridclr/common_errors/)和[xLua常见问题](https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md)。 - 任何问题都可以在qq群(670455213)沟通。