Unity框架与.NET, Mono框架的关系

什么是C#

C#是一种面向对象的编程语言。

什么是.NET

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

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

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

什么是Mono

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

Unity是什么

Unity是一个游戏开发框架,框架的各种库是使用C#来实现。

Unity 引擎的外层是用C#实现,内部则是对 C/C++ 做直接调用。它的内部是用原生 C/C++ 构建的。

Unity与Mono之间的关系

使用Unity做游戏脚本开发,脚本编写好后,使用Mono将C#代码编译成CIL标准中间码,再使用Mono的跨平台能力将编写的CIL运行到各个目标平台上,比如运行到iOS,安卓手机上。

如何看待.NET Framework,Mono和.NET Core

随着微软对.NET框架的开源,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core。

.NET Core是一个模块化的开发栈,它提供了框架的基础能力,包含跨平台,它是未来的所有.NET平台的基础。

.NET Framework可以看做是.NET Core在Windows上的一个发行版,Mono可以看做是.NET Core的一个跨平台发行版。

随着.NET Core Framework的开发完成,.NET Framework与Mono将基于.NET Core重新构建。

.NET框架

.NET是一个框架,它具有跨语言,跨平台的特性。

.NET通过将各语言先编译成中间语言(IL),然后再执行时用即时(Just In Time)编译器将之编译成本地平台代码来实现异构平台下对象的互操作,.NET通过公共语言运行库CR(Common Language Runtime)来实现资源对象,类型的安全。

.NET有很多种语言组成,比如C#、 VB.NET、J#、JS、 C++,它们的编译产物都是运行在.NET FrameWork Run Time之上的。其中,C#是主流。

C#源码编译流程

C#源代码在.NET程序的编译中,代码编译会生成exe公共中间语言文件。

C#源代码Unity和这个很相似,代码会被编译成dll公共中间语言文件。

它的编译过程如下:

源代码.cs - CLS编译(公共语言标准)- 通用中间语言(exe, Unity中编译成dll格式)-CLR编译- 机器码

.NET框架可以支持多种语言,那么在一个项目中同时存在这么多语言,它们如何通信呢?

1.首先将它们各自编译成通用中间语言

2.再使用通用中间语言进行互相调用。

这样做的目的:跨语言

3.点击exe, 系统会调用CLR编译(目的是优化,跨平台,一个exe可以编译成多个window平台,甚至编译成Linux系统)进行即时编译,生成01二进制 

4.unity的跨平台是重写了CLR(公共语言运行库)编译,可以编译成java,android(需要编译成哪种平台,就拿哪种平台的CLR,这样对应的系统就可以识别,来实现跨平台)多种平台的01机器码

<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src='https://unpkg.com/@antv/l7'></script>
</head>
 
<body>
  <div id="map"></div>
  <script>
    const scene = new L7.Scene({
      id: 'map',
      map: new L7.GaodeMap({
        style: 'dark',
        center: [110.770672, 34.159869]
      }),
    });
  </script>
</body>
 
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

icwx_7550592

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值