正在努力加载中...
Unity跨平台原理
  1. 1. 关于Mono
  2. 2. Mono运行时
  3. 3. 脚本机制
  4. 4. Unity的脚本机质实现

众所周知,Unity可以产出兼容各个平台的游戏软件,这里咱虽然还是一个Unity入门者,可以先从底层来了解一下Unity为何能做到这种能力,这背后其实还挺有意思,因为它可能会涵盖很多计算机的基础知识。本文的一些信息主要是从Unity3D脚本编程这本书里学习来的。

在Unity初期,它只支持在Macbook上运行和生产,但是随着移动端的普及,他们的团队意识到强依赖平台的基座会阻碍他们的推广和进展,存在很多新的开发量以及很难跟随时代的变化,所以他们选择底层采用Mono去进行了一次改造,让底层依赖与具体平台的关系剥离开,更好的做到跨平台。

关于Mono

Mono这个框架本质是对CIL(通用中间语言)的实现,CIL也叫做MSIL(微软中间语言),它可以在任何支持CLI(通用语言基础结构)的环境中运行,比如.NET就是对这个标准的实现。我们说的IOS、安卓、windows、Mac OS都支持它,所以使用它也就能达到跨平台的能力了。

Mono主要由四个部分组成:

Mono运行时

C#编译器(MCS)作用是把C#编译为ECMA CIL的字节码,之后需要Mono运行时的编译器把这个码转译为原生码(也就是操作系统直接可以读取的代码)。
Mono运行时提供三种转译方式:

脚本机制

很早的时候我们只能用一种编程语言去实现游戏,但是我们知道游戏是一种对性能要求很高的东西,我们用C/C++之类的语言去开发软件的性能会更高,但是如果用一些高级解释语言,因为要花费时间去翻译,所以它的性能比不上C/C++。
我们常见的语言:

Unity的脚本机质实现

我们假设我们拥有了一个用C、C++写好的Unity应用,然后我们把Mono运行时引入——把libmono和应用链接,链接的过程需要使用pkg-config工具,应用就获取了一个完全的虚拟机运行环境——一个可执行的文件。
Mono的嵌入接口会把Mono运行时暴露给Unity,这样开发者就可以去控制Mono,Mono初始化OK后,就要把CIL的代码加载进来。此时地址内容就成为:C、C++代码(非托管代码)-Mono运行时-托管代码。
比如我们新建了一个HelloWord.cs文件,我们使用Mono的C#编译器将它转换为一个DLL文件,然后我们就在Unity.cpp里通过调用Mono的运行时去加载执行这个DLL文件。

剩下的更复杂的内容>_<就等我再多熟悉和学习Unity后再补充吧~

上一篇 下一篇
ABOUT
欢迎来到小年糕的后花园,年糕的小站开设于2017年,博主年糕君是一个爱好十分广泛的人,也是一个比较佛系的人,不定时爆发脑洞更新(因为是社畜,也可能失踪很久,工作太累了)。 查看更多