Version: 2017.1
iOS Specific Optimizations
Optimizing the size of the built iOS player

Measuring Performance with the Built-in Profiler

Unity iOS and Android contain a built in profiler. The built-in profiler emits console messages from the game running on device. These messages are written every 30 seconds and will provide insight into how the game is running. Understanding what these messages mean is not always easy, but as a minimum, you should quickly be able to determine if your game is CPU or GPU bound, and if CPU bound whether it’s script code, or perhaps Mono garbage collection that is slowing you down. See later in this page to learn how to configure the built-in profiler.

What the Profiler Tells You

以下是内置性能分析器的输出示例。

iPhone/iPad Unity internal profiler stats:
cpu-player> min: 9.8 max: 24.0 avg: 16.3
cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3
cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9
cpu-present> min: 1.2 max: 3.9 avg: 1.6
frametime> min: 31.9 max: 37.8 avg: 34.1
draw-call #> min: 4 max: 9 avg: 6 | batched: 10
tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572
verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900
player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 ..2
mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0 
mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7

所有时间均以毫秒/帧为单位。可以查看最近三十帧的最短时间、最长时间和平均时间。

General CPU Activity

cpu-player 显示游戏在 Unity 引擎中执行代码以及在 CPU 上执行脚本所用的时间。
cpu-ogles-drv 显示在 CPU 上执行 OpenGL ES 驱动程序代码所用的时间。绘制调用的数量、内部渲染状态变化的数量、渲染管线设置甚至已处理顶点的数量等大量因素都会影响驱动程序的统计信息。
cpu-waits-gpu 显示 CPU 在等待 GPU 完成渲染时处于空闲状态的时间。如果此数字超过 2–3 毫秒,那么应用程序很可能受限于填充率/GPU 处理。如果该值太小,则性能分析中不会显示该值。
msaa-resolve The time taken to apply anti-aliasiing.
cpu-present 在 OpenGL ES 中执行 presentRenderbuffer 命令所用的时间。
frametime 表示一个游戏帧的总时间。请注意,iOS 硬件始终锁定在 60Hz 的刷新率,因此您将始终得到 16.7ms (1000ms/60Hz = 16.7ms) 的倍数。

Rendering Statistics

tris # 为渲染发送的三角形总数。
verts # 为渲染发送的顶点总数。如果仅使用静态几何体,应将此数字保持在 10000 以下,但是如果有大量的蒙皮几何体,应将其设置为小得多的值。
batched 由引擎自动批处理的绘制调用、三角形和顶点的数量。将这些数字与绘制调用和三角形总数比较,就会知道场景的批处理准备状态。为改善批处理性能,应当在对象之间尽可能多分享材质。

Detailed Unity Player Statistics

The player-detail section provides a detailed breakdown of what is happening inside the engine:-

physx 在物理方面所用的时间。
animation 为骨骼生成动画时所用的时间。
culling 剔除摄像机视锥体外的对象所用的时间。
skinning 将动画应用于蒙皮网格所用的时间。
batching 对几何体进行批处理所用的时间。与静态几何体的批处理相比,动态几何体的批处理成本要高得多。
render 对可见对象进行渲染所用的时间。
fixed-update-count 在此帧期间执行的 FixedUpdates 的最小和最大数量。过多的 FixedUpdates 将大大降低性能。

Detailed Scripts Statistics

mono-scripts 部分提供 Mono 运行时期间执行代码所用的时间的详细分类:

update 脚本中执行所有 Update() 函数所用的总时间。
fixedUpdate 脚本中执行所有 FixedUpdate() 函数所用的总时间。
coroutines 在脚本协程内所用的时间。

Detailed Statistics on Memory Allocated by Scripts

mono-memory 部分让您了解 Mono 垃圾回收器如何管理内存:

allocated heap 可用于分配的内存总量。如果堆中没有足够的内存用于给定的分配,将触发垃圾收集。如果即使在收集之后仍然没有足够的可用内存,那么分配的堆的大小将增大。
used heap allocated heap 中当前已由对象使用的部分。每次创建新类实例(不是结构)时,该数字都会增长,直到进行下一次垃圾收集。
max number of collections 最近 30 帧期间的垃圾收集执行次数。
collection total duration 在最近 30 帧期间发生的所有垃圾收集过程的总时间(毫秒)。

配置

在 iOS 上,内部性能分析器默认处于禁用状态。要启用,请打开 Unity 生成的 XCode 项目,选择 InternalProfiler.h 文件,将以下行

 #define ENABLE_INTERNAL_PROFILER 0

更改为

 #define ENABLE_INTERNAL_PROFILER 1

选择 XCode 菜单中的 View > Debug Area > Activate Console 以显示输出控制台 (GDB),然后运行您的项目。Unity 每 30 帧就将统计信息输出到控制台窗口。

To enable it on Android, click the Enable Internal Profiler checkbox in PlayerSettings (Edit > Project Settings > Player). Make sure Development Build is checked in the Build Settings when building, and the statistics should show up in logcat when run on the device. To view logcat, you need adb or the Android Debug Bridge. Once you have that, simply run the shell command adb logcat.

iOS Specific Optimizations
Optimizing the size of the built iOS player