Unity在韩国大会上宣布了Unity 7将完全支持CoreCLR,将大大减少编译的时间。
现在已经出了6000.7.0a3。安装测试了一下,已经有了CoreCLR模块,但还不能完全支持。
在 Unity 6.7 中启用 CoreCLR
1. 安装 CoreCLR Player 模块
打开 Unity Hub:
Installs → Unity 6.7 → Manage → Add modules
找到并安装类似下面名称的模块:
Experimental CoreCLR Desktop Player
官方说明 CoreCLR Desktop Player 是 Unity 6.7 Alpha 随附的可安装实验组件;Unity Hub 支持通过 Manage → Add modules 为已安装的 Editor 添加模块。(Unity Discussions)
如果列表中没有这个模块,通常是以下原因:
- Unity 版本低于 6000.7 Alpha 2
- 当前版本不是带 CoreCLR 的预发布版本
- Editor 不是通过 Unity Hub 安装的
- 当前操作系统或架构不受支持
2. 切换到桌面构建平台
打开:
File → Build Profiles
选择桌面平台之一:
- Windows
- macOS
- Linux
然后执行 Switch Platform。
CoreCLR 实验版本目前只支持:
- Windows:x86、x64、Arm64
- macOS:仅 Arm64
- Linux:x64
Android、iOS、WebGL 和 UWP 目前不能使用这个 CoreCLR Player。
3. 设置脚本后端
打开:
Edit → Project Settings → Player
然后展开:
Other Settings → Configuration → Scripting Backend
选择:
CoreCLR (Experimental)

也可以从:
File → Build Profiles → Player Settings
进入同一个设置界面。
4. 构建项目
进入:
File → Build Profiles → Build
构建出来的桌面 Player 就会使用 CoreCLR。
一个容易误解的地方
在 Unity 6.7 中,即使 Player 设置成 CoreCLR:
- 构建出来的桌面程序使用 CoreCLR
- Unity Editor 自身仍使用 Mono
- Editor Play Mode 仍然受到 Mono 和 AppDomain Reload 机制影响
因此,切换后不会让 Unity Editor 本身立即获得 CoreCLR 的完整性能和 .NET 新特性。
Unity 官方计划在 Unity 6.8 中让 Editor 和桌面 Player 全面使用 CoreCLR,并移除 Mono,同时升级到 .NET 10 和 C# 14。(Unity Discussions)
CoreCLR、Mono 和 IL2CPP 有什么区别?
三种脚本后端的定位并不完全相同。
| 对比项 | Mono | CoreCLR | IL2CPP |
|---|---|---|---|
| 编译方式 | JIT | JIT | AOT |
| 主要用途 | 编辑器、开发测试 | 现代桌面运行时 | 移动端、主机和正式发布 |
| 构建速度 | 较快 | 较快 | 较慢 |
| 运行时性能 | 一般 | 通常更好 | 通常较稳定 |
| 现代 .NET 支持 | 相对有限 | 更接近现代 .NET | 取决于 Unity 支持范围 |
| 动态代码生成 | 支持 | 支持 | 受限制 |
| 代码逆向难度 | 较低 | 较低 | 相对较高 |
| 当前成熟度 | 成熟 | 实验阶段 | 成熟 |
CoreCLR 的主要价值不只是性能。
更重要的是,它可以让 Unity 更容易使用现代 .NET 的能力,例如:
- 更新版本的 C#
- 更新版本的基础类库
- 更现代的垃圾回收机制
- 更成熟的 JIT 编译器
- 更好的跨平台 .NET 兼容性
- 更方便地接入部分 .NET 生态工具
不过,这些能力最终能否在 Unity 中完整使用,仍然取决于 Unity 对 API、序列化、构建流程和平台层的支持。
官方明确说明 Unity 6.7 的 CoreCLR Player 只适合兼容性验证和技术测试,不适合正式生产环境。
另外,CoreCLR 并不是"把 C# 提前编译为原生代码":它仍然是 JIT 后端,C# 先编译为 IL,运行时再由 RyuJIT 编译为机器码;它和 IL2CPP、Burst 是三种不同的技术路线。