统一脚本后端IL2CPP和Mono2x之间的区别


14

IL2CPP是Unity开发的脚本后端,在为某些平台构建项目时,可以将其用作Mono的替代方案。注意-IL2CPP仅在为以下平台构建时可用:

  • Android AppleTV,iOS *,Nintendo 3DS,Nintendo Switch,Playstation 4 Playstation Vita,WebGL *,Windows Store,Xbox One

我有一个已切换为Android部署的项目(UNITY 5.2)。我试图将脚本从切换Mono2xIL2CPP并向我显示

IL2CPP在Andriod上是实验性的,不受支持

因此,我的简单问题是,如果仍不支持该选项,那么为什么要包括该选项,IL2CPP和Mono2x之间的根本区别是什么。为什么我切换到IL2CPP脚本后端?它的优缺点是什么?

我还检查了统一5.5.2在Windows平台部署中没有IL2CPP选项。

Answers:


14

信息基于Unity版本2018.2:

引用关于IL2CPP的Unity手册

IL2CPP(C ++中间语言)是Unity开发的脚本编写后端,在为各种平台构建项目时,可以将其用作Mono的替代方案。IL2CPP(一种提前(AOT)编译器)以与Mono脚本编写后端相同的方式支持托管代码的调试。

使用IL2CPP构建项目时,在为所选平台创建本地二进制文件(例如.exe,apk,.xap)之前,Unity将IL代码从脚本和程序集转换为C ++。IL2CPP的一些用途包括提高Unity项目的性能,安全性和平台兼容性。

引用有关IL2CPP和Mono的Unity教程

每个脚本后端都有优点和缺点,这些优点和缺点会影响您的决定,哪种决定适合您的情况:

IL2CPP:

  • 与Mono相比,代码生成有了很大的改进。
  • 可以从顶部到底部调试C ++中的脚本代码。
  • 您可以启用引擎代码剥离以减小代码大小。
  • 构建时间比Mono更长。
  • 仅支持提前(AOT)编译。

单声道:

  • 比IL2CPP更快的构建时间。
  • 由于及时编译(JIT),因此支持更多托管库。
  • 支持运行时代码执行。
  • 必须运送托管程序集(mono-或.net生成的.dll文件)。

重要事项:

  • Android Player设置中的默认目标架构是带有IL2CPP和Mono脚本后端的armv7和x86。
  • UWP或iOS 11及更高版本不支持Mono。iOS播放器设置中的默认体系结构是带有IL2CPP脚本后端的armv7和arm64。

  • UWP构建仅支持IL2CPP和.NET,.NET脚本后端(不推荐使用)使用Microsoft的.NET来增强脚本功能。


1
我认为您的答案缺少参考。我看到IL2CPP / Mono列表与Unity的IL2CPP和Mono教程页面的文本相同,并且前两段与Unity的IL2CPP手册页面的文本相同,但顺序不同。请修改您的答案以包括参考,有关更多信息,请参见帮助中心
桑尼

3

IL2CPP是Unity开发的脚本后端,在为某些平台构建项目时,可以将其用作Mono的替代方案。当您选择使用IL2CPP构建项目时,Unity会将脚本和程序集中的IL代码(有时称为CIL-中间语言或通用中间语言)转换为C ++代码,然后再为示例)。IL2CPP的一些用途包括提高Unity项目的性能,安全性和平台兼容性。

资源

IL2CPP是一个假定等效的*执行平台,它比mono更快。在这种情况下,“实验性”非常强调前面句子中的“应该”一词。

出于公开发布Beta版软件的相同原因而发布了实验性功能:该软件足够好使用,并且开发人员希望从大量用户那里获得错误报告和其他反馈,以便他们可以立即准备好该软件或实际发布。


* IL2CPP不适用于仅通过反射使用的代码,当对从未直接调用并因此从构建中剥离的类使用反射,序列化或泛型时,将发生这种情况。当前,相同的限制适用于使用提前编译限制的平台上的Mono。


所以它仍然不成熟,但是我使用5.2时没有5.5的经验。或5.6。另外,在il2cpp转换的利弊是什么?
穆罕默德·法赞汗

它在某些平台上已经成熟。从Unity 5之前的至少IOS开始就已经存在了。我认为,即使最新版本的Android IL2CPP也未标记为实验性的。我发现在Android上从Unity 4跳到5的速度要慢一些,直到我开始使用IL2CPP。在我的测试设备上,速度明显更快。
Tartle Wizard'Apr 29'17

1
由于IL2CPP正在提前编译为机器代码,因此它在泛型的反射和使用方面还有一些其他限制。Mono的即时编译器可即时提供信息以进行内部检查和生成所需的代码,但是对于AoT,所有所需的代码都需要在构建时易于检测。
DMGregory
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.