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,很多东...
    吴秦阅读 17,108评论 14 128
  • Unity3D-重新编译Mono加密DLL。安卓应用总是让人头疼,游戏遭到破解与反编译是研发的人最不愿意看到的。自...
    某人在阅读 978评论 0 0
  • 1、特殊文件夹(unity doc : Special Folders) Unity工程根目录下,有三个特殊文件夹...
    乃糖阅读 4,147评论 2 26
  • 0x00 前言 刚开始写这篇文章的时候选了一个很土的题目。。。《Unity3D优化全解析》。因为这是一篇临时起意才...
    杨夏MX阅读 931评论 2 9
  • 找到所有左侧叶子结点的和。 稍微改变一下递归链,我们不递归右边的叶子结点,还有这个函数对于root是leaf的时候...
    misleadingrei阅读 27评论 0 0