• Unity3D学习(一):简单梳理下Unity跨平台的机制原理


    前言

    首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的。

    什么是Mono?

      参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,一个CLR的Runtime,和一组类库,并实现了 ADO NET和ASP NET。

      它基于CIL和C#的ECMA标准,提供了了微软.Net FrameWork的另一种实现。

     Mono主要有以下部分组成:

      C#编译器——mcs。(最新的Mono版本已经可以支持C#5.0,但Unity3D的Mono版本仍然停留在2.0+阶段(支持c#3.0),所以C#的一些新功能无法在unity中使用)

      运行时:即时编译器JIT(后文会介绍)。以及GC,类库加载器等等。

      基础类库(BCL)。

      Mono类库。提供了超出微软.NET的一些类,提供了许多额外功能,主要是用于构建其他操作系统上的应用。

    下面进入正题:

    Mono和Unity

    Unity引擎本身是由C++写出的,只不过Mono被嵌入到了Unity当中,为unity提供了一个完整的虚拟机运行环境。这样Mono的嵌入接口会将Mono Runtime暴露给Unity底层的C++代码。通过这些接口,开发者就可以控制Mono Runtime,以及依托于Mono Runtime的托管代码。

    Unity为何能够跨平台?

    一句话概括,主要原因在于Unity通过Mono使用了一种叫CIL(Common Intermediate Language,也叫MSIL)通用中间语言的基于堆栈的代码指令集,它属于CLR的一个子集。

    Unity3D的开发过程中,代码的编译主要分为两个过程:

    1)首先将对应的脚本代码编译成CIL(之后CIL还会被编译成一种位元码,生成一个CLI集合)。

    2)然后Mono在运行时将CLI集合中的位元码编译为本地运行的原生指令。(这里会使用到上文中的JIT、AOT编译模式)

    注:也就是说在Mono中运行的其实是CIL,而在本地运行的是被编译后生成的原生指令。

    这里再提一下什么是JIT和AOT

    JIT:即时编译,或者又称为动态编译,是在程序执行时才编译代码,即将一条中间托管语句(CLI)翻译成一条机器语句,然后执行这条语句。但它同时也会将编译过的代码进行缓存,而不是每一次都进行编译。所以说它是静态编译和解释器的结合体。

    AOT:静态编译,同样使用了JIT来进行编译,只不过它在程序运行之前就编译好了。但还是有一部分代码会即时编译。

    AOT的过程简要:

    1)收集需要编译的代码。

    2)使用JIT编译代码。

    3)发射编译过的代码和一些元数据

    4)调用本地汇编器或连接器处理后生成可执行文件。

    注:IOS平台禁止使用JIT编译器,所以Mono提供了一种FULL AOT模式,这里不赘述。

    总结

    Unity的跨平台,就是通过Mono将C#脚本代码编译成CLI,然后Mono运行时利用JIT或者AOT将CLI编译成目标平台的原生代码实现的。

    参考资料

      1.百度百科

      https://baike.baidu.com/item/CIL/3583850?fr=aladdin

      https://baike.baidu.com/item/JIT%E7%BC%96%E8%AF%91%E5%99%A8/3793585

      2.电子工业出版社:《Unity3D脚本编程》  作者:陈嘉栋

  • 相关阅读:
    【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number
    【BZOJ】【1026】【SCOI2009】Windy数
    【HDOJ】【3555】Bomb
    【HDOJ】【2089】不要62
    【Ural】【1057】Amount of degrees
    【POJ】【3710】Christmas Game
    【BZOJ】【2940】【POI2000】条纹
    【POJ】【3537】Crosses and Crosses
    【POJ】【2068】Nim
    【POJ】【2960】S-Nim
  • 原文地址:https://www.cnblogs.com/0kk470/p/7468054.html
Copyright © 2020-2023  润新知