Unity5.0新特性:在unity中编写脚本

发表于2017-10-17
评论0 1.3k浏览

之前的Unity脚本

我们利用Mono(WinRT 在Windows Store Apps 和Windows Phone上) 使用 C# ,获得第三方库和接近本机性能的易用性。然而,有一些挑战:

  • C# 运行时性能仍然落后于 C/c
  • 最新和最好的.NET 语言和运行时功能在Unity’s current version of Mono并不支持。
  • 大约 23 个平台和体系结构排列,耗费大量的精力,都需要移植,维护,并提供功能和质量的奇偶校验。
  • 垃圾回收可能会导致运行时暂停

         在过去几年里这些问题仍然在我们的头脑,因此Unity设法要解决他们。

        随着问题范围被明确,受审,实验研究不同的方法来解决这个问题。他们中有些人有前途 ;有些没有。但是最终,Unity找到创新的解决方案,它被证明是正确的路向。

这条路是 IL2CPP。

IL2CPP: 快速和龌龊的介绍

       IL2CPP 由两部分组成: Ahead of Time (AOT) compiler和Virtual Machine (VM)。

       这两个部分表明我们自己执行公共语言基础结构,类似于.NET 或Mono。这是符合之前unity脚本的实现。

        从根本上说,它与之前的实现不同,IL2CPP 编译器将程序集转换成 c 源代码。然后,它利用标准平台 c 编译器来生成本机二进制代码。

        在运行时执行这段代码 (就像一个 GC、元数据和平台特定的资源) 由 IL2CPP VM 提供的附加服务。

IL2CPP 的好处。

让我们谈谈以前提到的问题,IL2CPP 如何解决每每一个。

性能

IL2CPP 旨在C#中提供易用性和生产力的 和 c 的性能。

它允许之前、 生产脚本工作流都将保持不变同时给予立即的性能提升。我们已经看到在一些我们的脚本重基准 2 x 3 x 性能改进。这种性能提高是由于几个原因。

  • C 编译器和链接器提供种类繁多的先进优化在以前不可用。
  • 对您的代码的大小和速度的优化进行了静态分析。
  • unity集中脚本到运行时优化。

而 IL2CPP 绝对仍是进展中的工作,这些早期的性能增益是指示性的伟大的事情而来。

.NET 升级

        我们得到一个非常频繁的请求是提供运行时的升级。虽然过去多年来 .NET 拥有先进,Unity目前的 C# 编译器和类库支持.NET 2.0/3.5 时代功能。很多用户要求访问更新的功能,同时为他们的代码,以及第三方库提供。

       为了补充 IL2CPP,随着它的成熟,在编辑器中我们将也升级到最新版本的 Mono C# 编译器、 基类库和运行时 (编辑器将不切换到 IL2CPP,在开发过程中的快速迭代)。结合这两件事会给Unity带来现代版本的.NET。

它也是重要的是要注意Unity 与微软合作,使当前和未来的.NET 功能确保Unity的兼容性和质量。

可移植性和维护

        虽然这一领域可能听起来是Unity处理的内部问题,它也会影响你。的Unity的虚拟机都具有大量的平台和体系结构特定的代码。当我们到Unity带来一个新的平台时,我们的大量努力使 Mono 虚拟机为该平台移植和维护 。功能 (和 bug) 可能存在于某些平台而不是其他。这会影响Unity致力于为你提供价值;轻松部署到不同的平台的相同内容。

IL2CPP 解决了这些问题的方法数目:

  • 所有的代码生成是为 c ,而不是体系结构的特定机器代码。移植的成本和维护体系结构的特定代码生成现在更容易摊销。
  • 对我们来说 功能开发和修复 bug 更快地进行功能和错误修复是立即可用于所有平台。在它的当前状态,IL2CPP 支持是被移植到新的平台在短时间内。

此外,平台或体系结构特定的编译器可以预计比一个奇异的代码生成器更优化。这使我们能够重用已经进入的 c 编译器的所有努力而不是它自己进行改造。

垃圾回收

IL2CPP 不依赖于任何一个特定垃圾回收器,而与一个可插拔的 API 进行交互。在其当前迭代 IL2CPP 使用升级的版的libgc,即使当我们看着多个选项。除了只是 GC 本身,我们正在研究减少 GC 压力由 IL2CPP 编译器中进行分析。

虽然我们没有很多分享,研究正在进行。我们知道这对你们很多人很重要,我们会继续干下去,并随时向你通报在未来的博文中。无关到 IL2CPP,但是值得一提在进行垃圾回收,将会看到越来越多的Unity 5 分配免费的 Api。

IL2CPP 不是什么?

         IL2CPP  不重新创建整个.NET 或Mono 工具链。我们将继续使用Mono C# compiler。我们将继续使用Mono 的类库。目前支持所有功能和Mono  AOT 的工作应继续与 IL2CPP 的第三方库。我们只想为 Mono 虚拟机和 AOT 编译器提供的更换和将永远坚持利用the wonderful Mono Project。

我们什么时候可以使用 IL2CPP?

        由现在,我们希望你只是兴奋,因为我们是用 IL2CPP 和想知道当你可以在你的手 !早期版本的 IL2CPP 将可作为 WebGL 出版在unity5 中的一部分。

超出 WebGL,我们将继续为其他平台开发 IL2CPP。事实上,我们已经有工作实现对我们支持的平台的数目。我们预计今年晚些时候推出至少一个其他平台。我们当前的计划是有 iOS 下平台获得 IL2CPP 的支持。

我们Mono toolchain 的计划的升级将遵循 IL2CPP 在多个平台上可用并已成熟之后。

将永远不会得到 IL2CPP 的一个平台是 WebPlayer ;这是由于安全方面的影响。如前文所述,编辑器将仍可使用Mono。

此外,您可以看到 IL2CPP 运行时在今天的行动中。如前所述,我们贴出的两个 WebGL 演示是 IL2CPP 动力。


http://blog.csdn.net/u010019717/article/details/44788145

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引