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运行时,转为对应的原生码后在依托本地运行。

相关推荐
缺点内向1 小时前
C# 中 Word 文档目录的插入与删除指南
开发语言·c#·word·.net
唐青枫2 小时前
告别 if-else:C#.NET 模式匹配让代码更优雅的正确方式
c#·.net
世洋Blog7 小时前
更好的利用ChatGPT进行项目的开发
人工智能·unity·chatgpt
绿荫阿广9 小时前
使用.NET开发并上线一个小智AI对话机器人的MCP服务转接平台
.net·asp.net core·mcp
棉晗榜13 小时前
无法解析位于...\global.json 的 global.json 中指定的 .NET SDK 版本
.net
时光追逐者15 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 62 期(2025年11.17-11.23)
c#·.net·.netcore
evolution_language15 小时前
Unity场景(Scene)的注意事项和易错点
unity·游戏引擎·scene
宝桥南山18 小时前
.NET 10 - Blazor web assembly应用的一些诊断方式
microsoft·微软·c#·asp.net·.net·.netcore
EQ-雪梨蛋花汤18 小时前
【AI工具】使用 Doubao-Seed-Code 优化 Unity 编辑器插件:从功能实现到界面美化的完整实践
人工智能·unity·编辑器
sz老兄闯18 小时前
对 .NET FileSystemWatcher引发内存碎片化的 反思
.net