HybridCLR 探索

本文详细介绍了Unity中.NET、Mono和IL2CPP的概念,并探讨了HybridCLR这一热更新解决方案。通过示例项目,展示了HybridCLR的安装、配置和使用流程,包括AOT泛型、桥接函数和代码裁剪等关键问题。实际接入时需要理解AOT和热更DLL的关系,以及MonoBehaviour的挂载限制。此外,还讨论了C#编译效率提升的策略。

重要提醒:
耐心了解基础理论知识,是准确、快速接入的前提条件!
磨刀不误砍柴工。

.NET相关概念_NRatel的博客-CSDN博客

Unity 中的 .NET、Mono 和 IL2CPP_NRatel的博客-CSDN博客

关于HybridCLR | Focus Creative Games

一、示例项目 hybridclr_trial(旧)

1、下载并按照指引操作

指引:HybridCLRData/README.md
(目的是让Unity 使用 hybridclr 自己实现的 libil2cpp)

    - 酌情修改 init_local_il2cpp_data.bat(或.sh)文件中代码
    - `set IL2CPP_BRANCH=2020.3.33` 改成你的版本(目前只有2020.3.33或2021.3.1)
    - `set IL2CPP_PATH=<你的Unity editor的il2cpp目录的路径>` 改成你的Unity安装目录
    - 运行 init_local_il2cpp_data.bat 或.sh 文件 创建本地il2cpp目录,即 LocalIl2CppData 目录。

    看到如下表示成功:
    Cloning into 'hybridclr_repo'...
    Cloning into 'il2cpp_plus_repo'...
    ...
    succ

    若出现:'git' 不是内部或外部命令,也不是可运行的程序或批处理文件。 
    下载安装git:Git for Windows

2、运行

⑴、LoaddDll.cs 中:

DownLoadDlls ==》LoadGameDll ==》RunMain;
(下载热更Dll ==》加载热更Dll ==》运行)

⑵、App.cs 的 Main 方法中:

LoadMetadataForAOTAssembly ==》TestAOTGeneric;
(为AOT程序集加载元数据 ==》 测试AOT泛型正常运行)

3、代码文件简析

⑴、RuntimeApi.cs 

主要引入 C++ 程序集的方法 LoadMetadataForAOTAssembly(为AOT程序集加载元数据)

⑵、RefTypes.cs 

避免 反射用到的代码 和 值类型泛型 被裁剪/剥离。
具体方式为:
①、使用 Preserve 特性
②、在方法中使用,但方法不被实际调用(仅为了告诉编译器有用,不要裁剪)
③、还可使用 link.xml 文件。
-----------------------------------
(https://focus-creative-games.github.io/hybridclr/code_striping/)
(https://focus-creative-games.github.io/hybridclr/aot_generic/)

⑶、BuildConfig.cs

配置 MonoHotUpdateDllNames、AllHotUpdateDllNames、AOTMetaDlls、AssetBundleFiles、各阶段输入输出路径等。

⑷、AssetBundleBuildHelper.cs

提供各平台(Win64、Win32、Android、IOS)构建 AssetBundle 的接口方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值