Unity 脚本的未来发展
新技术之IL2CPP
最近,我们谈到了Unity 的WebGL 。 在那篇文中我们简要谈论到脚本在 WebGL 中的运行的新技术称为“IL2CPP” 。然而IL2CPP 所代表的不只是适用于WebGL 的脚本解决方案,同时也是我们自己为了在更多平台上执行 .NET时能有高效能的方案。
Unity 中脚本的现状
在深入探究未来之前,让我们先谈谈现在吧。
我们利用Mono (以及在 Windows Store App 和Windows Phone 上的WinRT )让C#变得容易使用,存取第三方资料库并最接近原生平台的效能。但是仍然有些挑战必须要解决:
• C# 运行时效能仍不如C/C++
• Unity 的当前版本Mono 不支援最新的.NET版本功能。
•同时要维持约 23 个平台转换结构,在移植、维护以及保证功能与效能都达到最好需要投入大量精神。
•执行时,垃圾回收可能会导致暂停。
在过去几年中我们试图解决这些问题,但是进展不大。 同时针对WebGL 支援脚本的研究开始。 随着这两项研究的深入,我们将这两条路径合二为一。
问题范围明确,我们为了解决这问题尝试了各种不同实验。有些方法有希望解决问题,有些则否。最终我们发现了一个创新的解决方案,这正确方向就是 IL2CPP 。
IL2CPP: 简单介绍
IL2CPP 由两部分组成: 一个预先编译器( Ahead of Time (AOT) compiler) 和一台虚拟机( Virtual Machine (VM) )。
这两部分意味着我们对通用语言基础结构( Common Language Infrastructure) 的实现,类似于.NET 或Mono 。 它与Unity 中目前的脚本相容。
从根本上来说它不同于及时编译,因为IL2CPP 编译器会将程式转换成C++ 源始码,然后再利用标准 C++ 编译器来产生原生二进制文件。
在执行时也会把 IL2CPP 虚拟机所提供的其它服务带过去(如GC 、中继资料、平台资源)。
IL2CPP 的优势
我们再来谈谈前面所提到的每个问题,看看IL2CPP 如何一一解决。
性能
IL2CPP会在基于 C# 的易用性和高效性的同时,带来C++ 的卓越性能。
目前有效率的脚本工作流保持不变,同时提升性能。 我们已经测试过在一些脚本很多的程式中性能提升了2 至3 倍。这种性能提升要归功于几个因素。
• C++ 编译器和连结器提供了大量之前没有的进阶优化功能。
• 静态分析是用于优化大小和速度的程式上执行的。
• 以Unity 为中心的脚本执行时优化。
虽然IL2CPP 还处于发展阶段,但初期的测试已经可预期未来的发展很棒。
.NET 升级
我们经常收到希望我们升级.NET版本的请求。 尽管.NET 在过去几年取得了一些进步,Unity 对C # 编译器和类别库目前仍支持.NET 2.0/3.5 时代的功能。 许多用户要求要把新功能加入好让他们的程式和第三方资源库使用。
随着IL2CPP 的日益成熟,我们会将升级 Mono C# 编译器、类别库和编辑器(由于版本开发快速取代,编辑器不会转换到IL2CPP )到最新版本。 这将为Unity 带来一个现代版的.NET 。
同样值得一提的是,我们正与微软合作将现有和未来的.NET 功能放入Unity ,以确保相容性和效能。
可移植性和维护
虽然这个部分听起来像是一个应由Unity 处理的问题,但它也会对开发者产生影响。Mono 虚拟机拥有大量的平台和结构相关的程式码。 当我们把Unity发布到一个新的平台时,我们将为该平台投入大量的精力来移植和维护Mono 虚拟机。
不同的功能(以及Bug)可能存在于不同平台。 这将会影响到Unity想要为开发者创造的价值,就是我们希望开发者可以轻松地将相同内容部署到不同平台。
IL2CPP 以多种方式解决这些问题:
• 所有的程式都改为转换 C++ ,而非结构不同机器的代码。 移植和维护所产生的成本就可以得到更清楚的数据。
•新功能开发和Bug维护的速度会更快。 对我们而言,本来要花几天时间处理不同平台的结构转换变为花数分钟更改C++转换流程。 功能及Bug修复可立即用于所有平台。
照目前情况来看,如果支援IL2CPP可以在很短的时间内移植到新平台。
此外,统一化编译器的性能优化绝对远远优于一个一个维护不同的程式转换器。 这使我们能够重复利用已经导入 C++ 编译器的功能,而不需要重新做一个。
垃圾回收
IL2CPP 并没有连接任何一个垃圾回收器,而是开了一个API接口。 目前的版本中,IL2CPP 使用的是libgc 的升级版。除了GC 本身,我们也正在研究通过IL2CPP 编译器中完成的分析来减少GC 压力。
虽然此刻只有这些资料与开发者分享,但研究仍在持续在进行。 我们知道会有很多人关心这个发展,所以我们不会松懈并会保持提供最新消息。
与IL2CPP 无关,但偷偷地透露在垃圾回收的情况,Unity 5 .x 将会有越来越多无需分配的API 。
什么是IL2CPP不做的?
IL2CPP 并不是对整个.NET 或Mono 工具进行重新改写。我们将继续使用Mono C# 编译器(之后可能还会用到Roslyn )。 也会继续使用Mono 类别库。 目前对Mono 预编译器有效的所有功能和第三方资源库也会对IL2CPP相容。我们只是尝试提供一个虚拟机和预编译器的替代产品,我们还将继续利用性能卓越的Mono专案。
何时才能体验IL2CPP ?
现在我们希望您也像我们一样,对即将来临的 IL2CPP 感到兴奋,迫切地想知道何时才能使用 IL2CPP !
IL2CPP 的最初版本将在 Unity 5 中WebGL 发布的部分看到。
除了WebGL 之外,我们还在继续为Unity其他发布平台开发IL2CPP 。 事实上,我们已经在许多我们支援的平台上进行了一些工作。 预计将在年末至少再推出一个平台。 目前的计划是让iOS 成为下一个载有IL2CPP 支持的平台。
等到IL2CPP 可在多个平台上使用并且成熟之时,计划的Mono 工具升级将会接踵而来。
有一个平台永远不会受IL2CPP 支援,那就是WebPlayer,这是因为安全隐忧。 所以如前面所提的,Webplayer编译器仍将继续使用Mono 。
现在就可以看到IL2CPP执行时的效果。我们之前发布的两个WebGL Demo就是支援了 IL2CPP 。
接下来?
我们仍在为IL2CPP 埋头苦干的实现新功能、优化程式转换、修复漏洞并支援更多平台。 随着发展我们将继续发布更多官方消息与您分享。
资料
转自(墙外):Unity 脚本的未来发展
Unity 脚本的未来发展的更多相关文章
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- Unity脚本在层级面板中的执行顺序测试4-附加整理
测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...
- 5. Unity脚本的执行顺序
Unity是不支持多线程的,也就是说我们必须要在主线程中操作它,可是Unity可以同时创建很多脚本,并且可以分别绑定在不同的游戏对象身上,他们各自都在执行自己的生命周期感觉像是多线程,并行执行脚本的, ...
- 修改Unity脚本模板的方法合计
作为一个习惯于偷懒的程序,重复性的无聊内容是最让人无奈的事,就比如我们创建Unity脚本之后,需要手动调整生成的新脚本的格式.编码.内容:如果我们要编写的是编辑器或者服务器端脚本,需要修改的内容就会更 ...
- unity脚本运行顺序具体的解释
unity脚本自带函数执行顺序例如以下:将以下脚本挂在随意物体执行就可以得到 Awake ->OnEable-> Start ->-> FixedUpdate-> Upd ...
- unity脚本的运行顺序以及单例的实现
unity引擎把所有脚本先行编译后,在运行的时候一批,一批的函数进行执行. unity脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到 Awake ->OnEable-> St ...
- Unity脚本自动添加注释脚本及排版格式
Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...
- 编程学习笔记(第四篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(4)meta、元与元模型、软件方法的未来发展
一.meta.元与元模型 1.元. "元" 英语是 Meta,meta在不同的行业领域有不同的翻译,在 IT 领域一般来说 Meta 是翻译成元,主要因为在 IT 中Meta ...
- HBase--阿里未来发展
最近家里没网络,在公司加班写哈博客. HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性.高性能.高伸缩的分布式存储系统,使用HBase技术可在廉 ...
随机推荐
- css3选择器(上)
1.给导航加分割线,左右 .nav li::before,.nav li::after{ content:""; position:absolute; top:14px; heig ...
- SharePoint 2013 和卷影复制服务(VSS)概述
对备份供应商而言,卷影复制服务 (VSS) 使用集中式 API 简化了 Microsoft 服务器解决方案的备份.Microsoft SharePoint Foundation 包括一个参考 VSS ...
- Hadoop 2.5.1集群安装配置
本文的安装只涉及了hadoop-common.hadoop-hdfs.hadoop-mapreduce和hadoop-yarn,并不包含HBase.Hive和Pig等. http://blog.csd ...
- curl命令学习笔记
下载文件并保存为默认文件名 curl -O http://www.xxx.com/xxx.exe 下载文件并保存为指定文件名 curl -o filename.exe http://www.xxx.c ...
- Core Animation - 核心动画
CAAnimation类,是一个抽象类.遵循CAMediaTiming协议和CAAction协议! CAMediaTiming协议 可以调整时间,包括持续时间,速度,重复次数. CAAction协议 ...
- iOS UITableView , UITableViewController ,UITableViewCell实现全国各省市遍历,选择相应的地区
我们先看一下效果 代码如下 首先是第一个页面 rootTableViewController.h #import <UIKit/UIKit.h> #im ...
- DOM属性操作
HTML attribute --> DOM property 每个html属性都对应一个DOM对象属性,举个栗子: <div> <label for="userN ...
- C#语句2——循环语句(for穷举、迭代和while循环)
一.for循环拥有两类: (一).穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元. ...
- java中的list,set,数组之间的转换
使用该工具类import org.apache.commons.collections.CollectionUtils; 在Apache Jakarta Commons Collections中 St ...
- win8.1 user profile service 服务登录失败
在Win 8.1 上新建个用户后,不能登录. 出现 user profile service 服务登录失败. 无法加载用户配置文件. 网上大部分相同提示的问题是有关已有账号不能再次登陆的. 解决方式是 ...