返回「计算机、信息技术与工程」
Unity、Mono、IL2CPP 与 .NET 的关系
本文目录 7 个章节
Unity、Mono、IL2CPP 与 .NET 的关系
note · 更新说明 原笔记把 Unity 简化成“由 Mono 提供 C# 运行环境”。这对部分历史版本成立,但现代 Unity 还可使用 IL2CPP;可用的 .NET API 兼容级别也不等同于直接运行桌面 .NET SDK。
先区分四个概念
- C#:编程语言。
- .NET 标准库/API 兼容级别:代码可调用的一组类型和接口约定。
- Mono:开源 .NET 运行时实现之一。Unity 的 Mono 脚本后端通常把 C# 编译为 CIL,再由运行时执行,并提供垃圾回收等能力。
- IL2CPP:Unity 的 AOT 脚本后端,把托管程序集中的 CIL 转换为 C++,再由目标平台原生编译器生成二进制;运行时仍需要 Unity 提供的托管语义、GC 与互操作支持。
编译与运行路径
Mono 后端
C# 源码 → C# 编译器 → CIL 程序集 → Mono/Unity 运行时执行
Mono 后端通常便于快速迭代和调试,但具体 JIT/AOT 能力受目标平台限制。
IL2CPP 后端
C# 源码 → CIL 程序集 → IL2CPP 转换为 C++ → 平台编译器 → 原生程序
IL2CPP 不是把任意 C# 语句直接“翻译成等价手写 C++”,而是 Unity 的构建链和运行时实现方案。AOT 环境会影响反射、泛型实例化、动态代码生成与代码裁剪,需要按 Unity 文档配置。
三张历史示意图
以下图片来自原笔记,用于理解早期 .NET/Mono 关系;其中版本与产品边界可能已过时。



实践中的判断顺序
- 确认 Unity 版本、目标平台和当前脚本后端。
- 确认 API Compatibility Level,而不是只看本机安装了哪个 .NET SDK。
- 检查第三方程序集是否支持 AOT、代码裁剪与目标 CPU 架构。
- 遇到内存问题时区分托管对象、Unity Native Object、原生插件和系统/驱动分配。
- 发布前分别在 Editor、Development Build 与真实发布构建验证,不能只依赖编辑器行为。