Unity 和Mono的关系

之前误解以为MonoBehaviour是Mono的东西,其实Mono打包之后才会体现出它的价值.
Mono是如何诞生的?
C#是如何被运行的?C#代码编写好之后被C#编译器编译成IL代码,然后IL代码被CLR运行时(JIT,AOT两种编译模式)编译成本机代码.但.net framework因为特定的依赖是能在windows上运行,于是Mono为了跨平台就诞生了.
.net .net framework CIL CLR CLI:.net是一个对一系列功能的期待,于是.net framework 是.net的实现. CIL,CLR,CLI都是属于.net framework
Unity是如何跨平台的?
mono就作为一个中间层将IL代码的处理分出好多个分支,分别对应不同的平台.Mono其实和.net framework 是同一个东西,只不过Mono支持更多的平台,但.net的运行效率更高
Unity打包时会将mono一同打包进来,同时Unity将脚本编译为IL代码打包,这样只要是Mono支持的平台,都可以在Mono中编译成平台本地代码
Unity 和Mono的关系_第1张图片

所有在Unity中所用到的类库都在这里,比如你引用一个System就会把相关的类库加进来,Assembly-CSharp.dll这个文件放的是所有你编写的脚本,Mono或者叫Mono运行时就是上图的libmono.so会把下图所有类库都编译成本机代码,至于还有一个libunity.so估计是跟运行unity有关的把.
Unity 和Mono的关系_第2张图片

Unity 和Mono的关系_第3张图片

中间代码可以实现平台无关性,即与特定CPU无关,只要把.NET框架某种语言编译成IL代码,就实现.NET框架中语言之间的交互操作(这就是为什么unity3D里面可以c#和js混编)

你可能感兴趣的:(Unity3D,C#语言,.net,Mono,.net,framework)