📄️ MonoBehaviour支持
HybridCLR完全支持热更新MonoBehaviour和ScriptableObject工作流,即可以在代码里在GameObject上Add热更新脚本或者在资源上直接挂载 热更新脚本。但由于Unity资源管理机制的特殊性,对于资源上挂载热更新脚本,需要打包工作流上作一些特殊处理。
📄️ PInvoke支持
hybridclr 一直以来都支持调用 AOT 中定义的 extern 函数,这是推荐且唯一受支持的 PInvoke 使用方式。
📄️ MonoPInvokeCallback支持
当与lua之类的第三方语言交互时,需要从这些第三方语言调用C#函数。必须解决两个问题:
📄️ DOTS支持
DOTS的TypeManager初始化时机过早,而且不支持动态注册Component和System等类型。为了让热更新模块能在DOTS系统中正常 运行,需要调整World的初始化时机,确保加载完热更新程序集之后、创建任何World之前完成类型注册。
📄️ HybridCLR+lua/js/python
有一些项目已经上线,它们的大多数代码已经用lua实现了;或者一些新项目已经用lua开发到一半,他们无法完全切换为全C#开发,但希望 可以同时接入HybridCLR,帮助慢慢过渡到全部原生C#热更新。由于HybridCLR是原生C#热更新技术,原生支持与这些脚本语言配合工作。
📄️ 代码混淆
如果没有对热更新代码进行混淆,经过ILSpy之类的反编译工具,可以轻易还原近乎源码的C#代码,这对商业游戏项目和独游开发的知识产权和代码安全产生严重威胁。