Unity引擎:从Mono迁移到.NET CoreCLR

Unity引擎运行时正在从Mono迁移到.NET Core CLR,一个充满挑战的旅程。.

1  Unity引擎官宣

Unity引擎:从Mono迁移到.NET CoreCLR

Unity 引擎开发团队宣布,他们已开始将 Unity 引擎运行时从 Mono 迁移到 .NET Core CLR。此外,他们还会提供融合 JIT 和 AOT 的解决方案 —— 即集成 IL2CPP 和 Burst,从而实现编译时间效率和代码生成质量之间的最佳平衡
目前,Unity 迁移到 .NET Core CLR 运行时所涉及的工作已经开始。团队表示这是一个非常具有挑战性的旅程,为了能够成功完成迁移,他们会逐步解决这个问题,并确保能够以保持现有 Unity 项目稳定性的方式渐进发布更新。
因此,开发团队会分多个阶段完成此次迁移:
  • 首先,为桌面平台的独立 player 提供对 .NET CoreCLR 的支持。基于此,开发者可以在 player 设置中选择此运行时以及现有的 Mono 和 IL2CPP 后端。
    团队认为,此阶段可以帮助他们迁移 Unity 引擎的核心部分(比编辑器部分小得多),并有望解决此迁移所涉及的大部分技术挑战。开发者在这个阶段仍将通过 .NET Standard 2.1 API 访问 .NET 运行时,他们的目标是在 2023 年发布新的运行时。

  • 然后在第二阶段,团队会把 Unity 编辑器移植到 .NET CoreCLR,同时取消对 .NET Mono 运行时的支持。第二阶段的挑战是,如何在不使用 AppDomain 的情况下在编辑器中重新加载脚本,并完成向 .NET CoreCLR 的切换。它还将涉及升级 IL2CPP 以支持来自 dotnet/runtime 仓库的基类库。开发者最终可以访问完整的 .NET 7.x 或 8.0 API。Unity 团队计划在 2024 年发布新编辑器。

Unity引擎:从Mono迁移到.NET CoreCLR
对外,Unity 正在与 Microsoft 和 JetBrains 等行业合作伙伴合作,加大对开源社区的参与力度,以确保 Unity 创作者能使用最新的 .NET 技术

2  .NET CoreCLR

.NET Core 是由许多项目所组成,除了基本的类库(Core FX) 之外,也包含采用 RyuJIT 编译的运行平台 Core CLR、编译器平台.NET Compiler Platform、采用 AOT 编译技术运行最优化的包 Core RT (.NET Core Runtime),以及跨平台的 MSIL 编译器 LLILC (LLVM-based MSIL Compiler) 等项目。

Unity引擎:从Mono迁移到.NET CoreCLR

Core CLR 移植了 .NET Framework 的 CLR 的功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境

CoreCLR:https://github.com/dotnet/coreclr