Unity3D工具、Mono工具、内部脚本工作原理以及跨平台特性

1、几个概念的理解:

Unity3D主要包括两个部分:Unity Engine和Unity Editor。提供了UnityEngine.dll和UnityEditor.dll两个动态库。

Unity Engine:C/C++编写,由平台相关代码,图形API、物理引擎、灯光、网络层接口等组成,编译为UnityEngine.dll,各平台不同,用户Shader代码也属于这一层的内容;

Unity Editor:IDE工具,大部分是由C#编写,插件也是用C#编写(调用UnityEditor.dll开发),用户脚本可用C#/JS/Boo编写,项目代码最后由Mono编译;

Mono运行环境:Novell公司开发的跨平台·NET运行环境。功能是编译工程以及提供不同平台的CLR运行时。对于Android平台,首先编译输出为dll(即IL),游戏启动时Mono运行时再将用户dll和UnityEngine.dll等编译为JIT格式运行;对于iOS平台,由于不允许运行时生成Native Code,只能一次性将UnityEngine.dll和用户脚本等编译为Full AOT格式存储。

JIT(Just-in-Time compilation,即时编译)

AOT(Ahead-of-Time,提前编译或静态编译)

上面说了,在IOS平台,不能再运行时生成Native code,为了绕过苹果公司的这个机制,可以使用Lua语言来实现热更新。

2、Unity3D程序以及内部脚本工作原理:

由上面介绍可知,Unity程序调用的层次关系是:

脚本(C#/JS/Boo)/UnityEditor/Unity Plugin -->

UnityEngine(C/C++) -->

图形API(OpenGL/DirectX/CG/Shader等)/物理引擎(Nvidia的PhysX)/灯光(Autodesk的Beast/Enlighten)/网络层(UNET) -->

底层代码(如操作系统内核、汇编等) -->

硬件

3、Unity3D跨平台特性:

这里的上帝是Mono,它为Unity游戏提供了.Net框架。针对不同平台的编译打包,都会把Mono运行时打包进去,当执行用户脚本的时候,就是由它来解析,从而达到跨平台的效果。

你可能感兴趣的:(Unity3D工具、Mono工具、内部脚本工作原理以及跨平台特性)