Unity跨平台的基本原理(Mono)

Unity的底层是通过C/C++来完成,Mono同时具备了跨平台的和跨语言两个特性。

利用Mono实现Unity上层逻辑的跨语言和跨平台

Unity主要包括两个部分

  1. Unity Engine:提供UnityEngine.dll动态库,各平台有所不同,C/C++编写,包含平台相关代码、图形API、物理引擎、灯光等所有游戏引擎底层内容
  2. Unity Editor:提供UnityEditor.dll动态库,大部分由C#编写,用户脚本最初可以使用C#、JavaScript、Boo语言编写,项目代码最后由Mono编译

Mono跨平台的基本原理:

        Mono利用.Net平台制定的CLI公共语言基础结构规则,使得可以将多种语言编译成通用规范的CIL公共中间语言,通过CLR将这些CIL转换为对应操作系统的原生代码。这样用各种语言编写的逻辑就能在指定操作系统上运行了

        将基于CLI公共语言基础规则的语言编译成CIL公共中间语言,再通过Mono 虚拟机将其在各操作系统中转译为原生机器码进行运行

Mono的主要构成:

  1. C#编译器(mcs)
  2. Mono Runtime 类似CLR(虚拟机)包括JIT(Just in time)即时编译器、AOT(Ahead of time)提前编译器、GC、类库加载器 等待
  3. BCL基础类库
  4. Mono类库

提供了很多超出.Net的一些额外功能,主要用于构建各种操作系统上的应用

在Unity中使用的各种语言进行逻辑实现,这些语言在发布时会被编译成IL中间代码,最终在对应操作系统上通过Mono 虚拟机翻译为机器码运行

优点:只要在不同操作系统上实现Mono虚拟机,那么就可以支持更多的平台

缺点:维护耗时,当Unity版本更新时,Mono 虚拟机也需要维护和更新,那对于多个平台来说,工作量很大。低版本Mono无法支持新版本C#的特性