1、首先了解Unity3D中的库
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格式存储。
2、Unity程序调用的层次关系
脚本(C#/JS/Boo)/UnityEditor/Unity Plugin -->
UnityEngine(C/C++) -->
图形API(OpenGL/DirectX/CG/Shader等)/物理引擎(Nvidia的PhysX)/灯光(Autodesk的Beast/Enlighten)/网络层(UNET) -->
底层代码(如操作系统内核、汇编等) -->
硬件
3、Unity脚本事件执行生命周期