重要提醒:
耐心了解基础理论知识,是准确、快速接入的前提条件!
磨刀不误砍柴工。
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 的接口方法。

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

4819

被折叠的 条评论
为什么被折叠?



