0%

Unity底层如何处理C#

关键词

  • .NET mono 虚拟机
  • IL2CPP

为什么选择 mono

Mono 是一个开源的 .NET 框架的实现,它可以在 Linux、Mac、Windows 等平台上运行,而且可以在这些平台上编译出可执行文件。

开源、跨平台、Mono的开发工具( MonoDevelop 现在已被弃用)

为什么推出 IL2CPP

  • Mono 没有合法身份, 微软收购之后的版权问题
  • Mono 虚拟机 解释执行 .NET 字节码,效率低
  • 有些平台不允许内置 .net 虚拟机 (eg. iOS)
  • 如果有新的平台出现,Mono 难以为其提供支持(跨不了平台咯),移植很麻烦(eg. WebGL)

IL: Intermediate Language .NET框架中间语言, .NET字节码
IL2CPP: IL to C++,将IL转换为C++代码 --> 编译为可执行文件 --> native platform

Unity:

  1. Unity C/C++ 以及 native 的开发 --> 跨平台的 runtime (xcode, android studio)
  2. Unity 开发者脚本语言(C#) --> .NET字节码 --> .dll --> IL code --> IL2CPP --> C++
  3. C# GC --> c++ 为其提供支持
    IL2CPP vm:支持 C# .NET 独有的特性,如反射,泛型,委托,lambda表达式等

IL2CPP 做了什么?有什么优势?

  1. 跨平台可以执行问题 --> Unity -->> 移植 IL2CPP --> .NET 版本问题
  2. 性能获得提升 --> 基于 IL2CPP 发布(而不是 Mono)

欢迎关注我的其它发布渠道