Mono基本介绍
Mono组件
C#编译器——MCS:MCS的作用就是将C#编译为CIL(通用中间语言)
Mono运行时(mono Runtime):运行时中的编译器将CIL的Byte Code在转译为原生码,同时提供即时编译(JIT),提前编译(AOT),完全静态编译(Full-AOT)三种转译方式
基础类库:提供广泛的基础类
Mono类库:提供额外的有用功能,尤其是构建Linux方面
Mono如何提供脚本功能
总所周知Unity是由C++写成的,将Mono运行时嵌入到由C++写成的应用后,该应用便会获取一个完整的虚拟机环境 。Mono的嵌入接口就会将Mono运行时暴露给C++代码,哪些C/C++代码被称为非托管代码,经CIL编译器生成的CIL代码被称为托管代码。
Mono运行时嵌入应用可分为3个步骤:
- 编译C++程序和链接Mono运行时
- 初始化Mono运行时
- C/C++ 和C#/CIL的交互
假设我们要实现Unity中的组件系统,在C#中定义Component类,C#端中主要目的是为游戏脚本提供相应接口,而不是具体逻辑的实现。我们在C/C++中实现具体逻辑,再以该代码中创建的实例为样本,调用Mono提供的方法在托管环境中创建相同的类型实例。
我们可以看出,虽然引擎底层是由C/C++