Unity中.Net与Mono的关系

什么是.NET

.NET是一个开发框架,它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)两种约定,

CIL标准为一种编译标准:将不同编程语言(C#, JS, VB等)使用各自的编译器,按照统一的标准编译成语义一致的CIL中间码, 这样虽然代码使用的语言不同,但编译出的产物是一样的。

CLR标准为一种执行标准:不同的操作系统可以根据CLR这一执行标准开发出自己平台的中间码执行器,这样CIL这个标准中间产物就可以在不同的平台执行了。其中Mono框架就扮演了这样一个重要的角色,实现了各个平台的CLR执行器。

.Net拥有跨语言,跨平台性:

  • 跨语言:就是只要是面向.Net平台的编程语言,用其中一种语言编写的类型就可以无缝的在另外一种语言编写的应用程序中互操作。

  • 跨平台:一次编译,不需要任何代码修改,应用程序就可以运行在任意在.Net实现的平台上跑,即代码不依赖于操作系统,也不依赖硬件环境。一个.Net程序运行的核心在于.Net

CLR(公共语言运行时,或者称为.Net 虚拟机,类似java虚拟机的概念),为了让.Net程序在其他平台(目前只能在.Net 平台,windows系统)上跑,微软官方还推出了在其他平台(MacOs,Linux)跑的

.Net的实现,就推出了.Net Core。

然而,Unity引擎需求也是需要跨平台,支持多语言(C#,Js,Boo)。就参考微软开发.Net Core的概念,于是,推出了Mono.

画个图简单对比一下:

到这里,基本说明了.Net 与Mono和Unity的联系关系,其实没啥关系。做游戏都知道,肯定需要跨平台,不能只支持一种平台,不然每个对应的平台做出一种对应的编译器,那真的会累死。所以对于跨平台的需求,对于游戏开发而言,很重要。Unity的架构需求设计当然也需要这个特性。参考.Net依托CLR来实现设计思路,于是Mono就出来了。

什么是Mono

Mono是一个框架,它是.NET这个开源框架的子集,它建立在.NET框架基础上,在使用.NET基础能力的基础上,自己做了多各个操作系统的CLR实现来实现跨平台。同时也重写了一些.NET框架中的基本功能。

mcs编译器: C#编译器,C#编译为IL中间指令。

Unity跨平台的原理: 就是Mono运行时编译器支持将IL代码转为对应平台原生码,IL可以在任何支持CLI(Common Language Insfrastructure,通用语言环境结构)中运行,IL的运行是依托Mono运行时。

IOS不支持jit编译原因:机器码被禁止映射到内存,即封存了内存的可执行权限,变相的封锁了jit编译方式,详情参考:https://www.cnblogs.com/murongxiaopifu/p/4278947.html

JIT编译: 将IL代码转为对应平台原生码并且将原生码映射到虚拟内存中执行。JIT编译的时候IL是在依托Mono运行时,转为对应的原生码后在依托本地运行。

相关推荐
军训猫猫头35 分钟前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
追逐时光者1 小时前
C#/.NET/.NET Core优秀项目和框架2025年6月简报
后端·.net
漫游者Nova6 小时前
虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕
ue5·游戏引擎·虚幻·游戏开发完整教程·恐怖游戏开发
ChaITSimpleLove6 小时前
.NET9 实现斐波那契数列(FibonacciSequence)性能测试
.net·性能测试·斐波那契数列·fibonacci·benchmarkdotnet·datadog.trace
死也不注释15 小时前
【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
unity·编辑器·游戏引擎
小赖同学啊1 天前
物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
物联网·unity·游戏引擎
Zlzxzw1 天前
使用unity创建项目,进行动画制作
unity·游戏引擎
唐青枫1 天前
C#.NET log4net 详解
c#·.net
X_StarX1 天前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生