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技术可在廉 ...
随机推荐
- 3D打印公司网站dedecms大气模板
模板描述:1. 用FTP将安装包上传到服务器解压(或者解压在上传): 2. http://您的域名/install/ 进入到安装界面, 按照正常步骤安装即可:不要修改数据库表前缀,否则会造成原先数据无 ...
- URL-统一资源定位器
URL - Uniform Resource Locator URL 可以由单词组成,比如 “w3school.com.cn”,或者是因特网协议(IP)地址:192.168.1.253.大多数人在网上 ...
- AndroidInject项目使用动态代理增加对网络请求的支持
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3540427.html AndroidInject项目是我写的一 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- ios开发人员北京,上海,深圳的工资待遇是多少?
ios开发人员北京,上海,深圳的工资待遇是多少? [1]首先看看平均工资 从图中来看,北京平均工资15570 居首,不愧是首都啊. 你过了平均线了吗?是不是感觉被平均了,如果感觉工资 ...
- JQuery制作简单的网页导航特效
使用JQuery中hover()方法,使其根据鼠标的移动简单的改变背景颜色; hover();用于模拟鼠标指针悬停事件,当鼠标指针移动到元素上时,会触发指定的第一个函数,当鼠标指针移除这个元素时,会触 ...
- 试用Jenkins 2 的 Pipeline 项目
目前Jenkins最新的版本是2.7,现在试用一下pipeline类型的项目,本来想构建一个1.651版本的Jenkins为例,无奈大陆的网络 访问github不稳定,只好改为简单的工程. 目前有一个 ...
- ORA-32004: obsolete and/or deprecated parameter(s) specified
如果在启动数据库时遇到ORA-32004: obsolete and/or deprecated parameter(s) specified 错误,这个是因为数据库里面设置了过时或不推荐使用的参数, ...
- json数据处理实战:Kafka+Flume+Morphline+Solr+Hue数据组合索引
背景:Kafka消息总线的建成,使各个系统的数据得以在kafka节点中汇聚,接下来面临的任务是最大化数据的价值,让数据“慧”说话. 环境准备: Kafka服务器*3. CDH 5.8.3服务器*3,安 ...
- 高效coder,筹备开源框架toutou.escort.js
背景:JavaScript在工作中运用的非常广泛,作为一门弱类型语言,在使用JavaScript的时候,很多事情需要coder manual的去完成,这无疑增加了coder的工作量. 扩展:在这样的背 ...