本页面详细介绍 iOS 部署所特有的优化。
UnityEngine 命名空间中的大多数函数都是用 C/C++ 实现的。从 Mono 脚本调用 C/C++ 函数会产生性能开销,因此使用 iOS 脚本调用优化 (Script Call Optimization) 设置可以为每帧节省大约 1 到 4 毫秒。
在 iOS 上进行开发时,一种较好的做法是永远不要依赖异常处理(无论是内部的异常处理还是通过使用 try/catch 块)。使用默认的 Slow and Safe 选项时,Unity 会捕获设备上发生的所有异常并提供堆栈跟踪。使用 Fast but no Exceptions 选项时,发生的任何异常都会导致游戏崩溃,并且不会提供堆栈跟踪。此外,Unity 会引发 AppDomain.UnhandledException 事件以允许特定于项目的代码访问异常信息。
使用 Mono 脚本后端时,游戏运行得更快,因为处理器无需分配处理能力来处理异常。使用 IL2CPP 脚本后端时,__Fast but no Exceptions__ 选项没有性能优势。但是,在公开发布游戏时,最好使用 Fast but no Exceptions 选项进行发布。
如果过于频繁地处理加速度计的输入,那么游戏的整体性能可能会受到影响。默认情况下,Unity iOS 应用程序每秒对加速度计进行 60 次采样。可以通过降低加速度计采样频率在一定程度上提高性能,甚至可以为不使用加速度计输入的游戏将此频率设置为零。可以在 iOS 平台的 Player 设置的 Other Settings 面板下更改 Accelerometer Frequency 设置。
由 IL2CPP 脚本后端生成的 C++ 代码可以逐步更新,从而允许增量式 C++ 构建系统仅编译更改的源文件。这种方式可以显著降低 IL2CPP 脚本后端的迭代次数。
要使用增量构建,请从 Build Settings 对话框中选择 Build 后选择 Append 选项。Replace 选项执行全新的构建。
Unity iOS 允许您更改应用程序尝试执行其渲染循环的频率;默认情况下,此频率设置为 30 帧/秒。降低此数字可以节省电池电量,但当然这种节省将以减少帧更新为代价。相反,也可以增加帧率,使渲染优先于其他活动(如触摸输入和加速度计处理)。您需要尝试选择不同的帧率来确定帧率在具体情况下对游戏运行过程的影响。
例如,如果应用程序涉及繁重的计算或渲染,但只能维持 15 帧/秒的帧率,那么将所需的帧率设置为高于 15 将不会带来任何额外的性能。必须充分优化应用程序来支持更高的帧率。
要设置所需的帧率,请更改 Application.targetFrameRate。