Version: 2019.1
iOS 2D 纹理覆盖
Unity Remote

升级到 64 位 iOS

iOS 64 位支持是使用名为 IL2CPP 的脚本后端实现的。它与您的 C# 代码一起运行。

IL2CPP 运行时将提前编译器与虚拟机相结合,将程序集转换为 C++,同时利用标准平台 C++ 编译器生成本机二进制文件。最终结果是显著改善性能、平台兼容性和可维护性。

IL2CPP 是唯一支持在 iOS 上部署到 ARM 64 位的脚本后端,因此必须部署到 Apple App Store 以发布新应用程序。

如需了解有关 IL2CPP 的更多信息,请参阅博客文章:脚本技术在 Unity 中的未来发展 (The future of scripting in Unity)Unity 中的 Apple iOS 64 位支持 (Apple iOS 64-bit support in Unity)

如何在 iOS 上开始使用 IL2CPP

Player 窗口上的 Scripting Backend 下拉菜单中选择 IL2CPP

选择脚本后端 (Scripting Backend)
选择脚本后端 (Scripting Backend)

默认情况下,此脚本后端的构建目标为__通用 (Universal)__ 架构(包括 ARM64 和 _ARMv7_);如果需要,可以在 Player 窗口中切换到特定的架构。在应用程序启动并以 64 位运行之前,应执行大量操作:

  • 您需要一台 64 位设备进行测试:所有搭载 A7 或更高版本芯片的 iOS 设备(目前这些设备包括:iPhone 5S、iPad Air、iPad Mini Retina、iPhone 6、iPhone 6 Plus、iPad Mini 3 以及所有更新版设备)。
  • 您需要使用 64 位支持功能编译所有原生插件(或作为源代码提供)。如果使用的是第三方插件,则应联系插件供应商以获取该插件兼容 IL2CPP 的 64 位版本。目前所有最新的 Prime31 插件都应该可以。
  • 如果您是插件供应商或者拥有自己的原生插件,则需要注意以下几点:
    • IL2CPP 与 Mono 运行时 API 不兼容(未公开),这意味着如果插件使用 mono_* 函数,链接将不再有效。解决此问题的最佳方法是切换到托管委托/回调方法,然后将托管回调传递到插件的本机端,并在某些本机数据或事件到达时从该位置调用这些托管回调。
    • 所有作为预编译静态库(.a 文件)提供的插件现在都应该包含 ARM64 切片。
    • 在进行本机代码/类型转换时,请注意,指针和长整数的宽度现在是 64 位,而整数的宽度仍然是 32 位。
  • 为了最大限度减少 C++ 代码的生成量,IL2CPP 总是(即使 Stripping level 设置为 __Disabled__)执行某种托管代码剥离。有时您需要对此进行辅助。请参阅 iOS 播放器大小优化手册中的 link.xml 指南。

故障排除

  • 问:我的代码在 IL2CPP 上比在 Mono 上运行得更慢。这是为什么? 答:确保在 Xcode Release 配置中测试代码性能。如果问题仍然存在,请提交错误报告!
  • 问:Unity 生成的 Xcode 项目无法编译,并出现以下或类似错误:Method not found: 'Default constructor not found...ctor() of System.ComponentModel.Int64Converter'。 答:反序列化程序和序列化程序通常仅通过 .NET 反射 API 引用某些类型,在这种情况下,可能会从项目中剥离这些方法甚至类。您可以通过以下方式提示托管代码剥离器使用了特定类/方法:通过 link.xml 或通过引入在一个脚本中对其进行显式引用的虚拟代码。
  • 问:Unity 生成的 Xcode 项目无法编译,并出现其他某种错误。 答:请确认您的所有插件是否都支持 ARM64 和 IL2CPP,如果是,请提交错误报告并将您的项目(或仅其脚本部分)附加到错误报告中。

  • 2018–06–14 页面已修订并只进行了有限的编辑审查
iOS 2D 纹理覆盖
Unity Remote