Unity3D培训
美国上市Unity3D培训机构

400-111-8989

热门课程

Unity引擎编译的程序是如何运行在iOS和安卓上的

  • 发布:Unity3D培训
  • 来源:Unity3D教程
  • 时间:2017-09-05 16:34

【unity编译的程序是如何运行在IOS和安卓上的】

Unity引擎编译后的程序是如何运行在iOS和Android上的?

不是很系统的了解这里的原理?今天unity3d培训机构到就带我们来看看具体的技术原理解答。

01

简单来讲,他在ios和android上各实现了一次。你的程序想发布到什么平台,你是要先export一下的,然后他会帮你尽量AOT成目标平台需要的指令集。

02

其实跨平台的基本原理并不复杂,主要难度还是针对具体平台的实施和优化。

平台/系统之间的差异总是要有人通过开发中间层来吸收,关键只是在于谁来做这个工作而已。

目前来说Unity Player的组成大概是UnityEngine + Mono运行时。

UnityEngine提供的是引擎的底层功能,这部分基本是C++实现的。每个目标平台有自己的平台依存代码,每种图形API各自有一个渲染器。(也就是说,基本上每个平台要有一个版本)

Mono(Home | Mono)运行时则是提供了一个跨平台的CLR实现,允许引擎和用户的托管代码运行在每一个目标平台上。Mono自身在开发的时候就是跨平台的,实际上也是对大部分支持的处理器架构分别实现了JIT/AOT引擎。(由于Unity现在支持的平台数大于他们使用的Mono版本,很多后端是Unity自己实现/调整过的)

所以Unity的多平台部署,基本就是用户的托管代码(平台无关)+针对目标平台的Mono运行时+针对目标平台的UnityEngine。用户生成的托管代码(.net Assembly)会在运行时被对应平台的Mono运行时JIT执行。

而Unity对Mono-AOT的利用,目前主要是针对iOS之类不允许运行时生成Native Code的平台,算是一个针对平台安全策略的Workaround。

当然Unity的多平台支持也不是仅仅把编译后的Assembly和Player打个包那么简单,因为对于游戏还有艺术资产的问题。

举例来说,每个平台可能有自己原生支持的音频格式、纹理格式等等。对于这些差异Unity在打包的过程中也会自行吸收掉。所以虽然很多用户看到的多平台发布体验基本上就是简单的右键另存为,但背后Unity还是做了不少工作。

维护十几二十个平台的Mono运行时是个相当麻烦的工作,外加Unity使用的Mono版本老旧,无法支持新的.net特性,性能也不尽人意。因此在未来Unity将会逐步开始引入新的运行时IL2CPP,最终替代大部分平台上的Mono Runtime。(目前已经用在了Unity 5.0的WebGL平台上)

IL2CPP会将CIL编译成C++,然后通过平台SDK的C++编译器编译成对应平台上的原生代码。

03

技术上看,关键点大致就是这些:

1. mono实现了基本的CLI库,和.net的编译环境。这样用户编写的.net代码可以直接编译成平台无关的bytecode

2. 针对具体平台,unity通过P/Invoke的方式实现了一系列专有类和接口函数,用来访问平台特定的资源。

3. 对于每一个平台,unity提供了一个应用的外壳,用来封装和引导以bytecode形式存在的用户代码。用户可以直接发布封装好的应用。

感谢大家阅读“【unity编译的程序是如何运行在IOS和安卓上的】”希望对大家有所帮助,更多精彩内容请关注Unity3D培训官网

预约申请免费试听课

上一篇:Unity3D教程 | 使用ARKit为iOS开发AR应用
下一篇:Unity Prefab 脚本修改教程
Unity|超级兔子

Unity|超级兔子

Unity超级角色控制器物理API分析与功能实现

Unity超级角色控制器物理API分析与功能实现

教程:让Unity中物理效果更加逼真

教程:让Unity中物理效果更加逼真

Unity3D 软件下载

Unity3D 软件下载

选择城市和中心
贵州省

广西省

海南省