在往后的几篇文章中,作者将基于unity提供的开源mono的代码,来研究一下Mono CLR(Common Language Runtime)的具体实现。这是本文的第一篇。
本文涉及到一些关于CLR和CIL的基础知识,如果没有阅读上篇文章的读者可以先阅读一下上一篇文章。简单总结一下就是CIL是一个标准化的通用中间语言,而CLR是一个可以解析和运行CIL这个语言的本地环境。
月熊:Unity C# 和 Monozhuanlan.zhihu.comMono是开源软件,Unity开始使用的时候,做Mono做了很多引擎相关的修改,时间一长,这些修改导致Unity维护的版本跟mono主线版本差异越来越大。随着Unity使用的人越来越多,越来越多的开发者想要对Unity自己魔改的Mono进行一些修改和调试。
不得已,Unity官方单独开一个Github来存放Unity自己修改后mono。
获取Unity对应版本的mono源码
对于使用Unity源码的同学,可以在 Src_Unity/External/Mono/builds/versions.txt中,找到对应的mono版本的md5(40个数字和英文混杂的字符串)mono_xx,拼接到https://github.com/Unity-Technologies/mono/tree/ 末尾,打开网页即可找到对应版本。
对于使用Unity官网引擎的同学,可以在https://github.com/Unity-Technologies/mono 中找到对应Untiy版本的mono源码。
笔者使用的是比较老的Unity5.6版本的Mono源码,如果没有特殊说明,后面的均已笔者手里的Unity5.6的代码为基础进行分析。
关于Mono部分目录介绍
如果读者按照上述的教程下载到对应版本的Mono源码后,解压,会生成一个Mono文件夹,里面包含了所选定Unity版本Mono所用到的构建脚本和代码。