Unity随笔:C#运行时

Unity是如何编译运行C#的

(1)Unity会通过编译器将C#脚本编译成IL指令。

Unity会通过Roslyn来对C#代码进行编译,生成中间IL指令集。

当我们每次修改或者添加新的C#代码文件,Unity界面的右下角会出现短暂的"转圈"现象。这就意味着引擎在自动编译C#代码来生成IL指令,"转圈"结束则代表完成编译。
最终的IL指令会被编译到Library/ScriptAssemblies/Assembly-CSharp.dll文件中。

每当代码有所修改时,这个文件都会自动重新编译,开发者并不需要额外操作,因此对此毫无感知。

IL指令的目标是让机器更好地执行我们编写的C#代码。

(2) 点击运行后 ,Unity通过Mono运行时解释DLL中的IL指令,最终将其翻译成CPU认识的机器码,这样就可以运行了

Mono运行时并非Unity所开发的,它是一个开源、跨平台的C#运行时解决方案。

起初,Unity不仅在编辑模式下使用Mono方案,而且打包后的运行依然是采用Mono,但这会带来一个问题:如何更好的与目标平台对接? 例如,PS游戏机平台会提供一些专门的API供开发者使用,但是肯定不会单独为Unity提供C#接口(各个平台提供的官方接口一般是C++的)。开发者如果想使用这些接口就得等Unity接入。如果能直接生成可在底层执行的机器码,必然会得到更好的性能,而这是用C#无法做到的。

后来Unity开发了IL2CPP 作为这个问题的解决方案。
IL2CPP用于在打包前将IL指令转换为C++代码,并在所有代码都转换成C++之后统一打包,这就为提升性能与多平台移植带来了不少便利。然而在开发时则保留了Mono运行时。

Unity的博客中提到,在2024年开始将会全买能使用.Net Core代替Mono,这样Unity将彻底摆脱Mono。

相关推荐
逐·風3 分钟前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
_oP_i2 小时前
Unity Addressables 系统处理 WebGL 打包本地资源的一种高效方式
unity·游戏引擎·webgl
m0_656974743 小时前
C#中的集合类及其使用
开发语言·c#
九鼎科技-Leo3 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo6 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发6 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
小乖兽技术6 小时前
C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)
c++·c#·交互·ipc
幼儿园园霸柒柒6 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
平凡シンプル9 小时前
C# EF 使用
c#
丁德双9 小时前
winform 加载 office excel 插入QRCode图片如何设定位置
c#·excel