注意:内部的性能分析器已被弃用,并将在 Unity 的未来版本中移除。请改用 性能分析器窗口 (Profiler window)。(菜单:窗口 (Window) > 分析 (Analysis) > 性能分析器 (Profiler))请参阅在 iOS 设备上收集性能数据,以了解如何对 iOS 设备进行性能分析。
Unity 提供了一个适用于 iOS 的内置性能分析器,用于深入了解应用程序的运行情况。每 30 帧,内置性能分析器会从设备上运行的应用程序输出控制台消息,以帮助判断应用是 CPU 密集型还是 GPU 密集型。如果应用程序是 CPU 密集型的,您可以进一步确定是脚本代码还是垃圾回收导致了瓶颈。
以下是内置性能分析器的输出示例:
iPhone Unity internal profiler stats
frametime> min: 32.5 max: 34.1 avg: 33.3
cpu-player> min: 2.2 max: 4.4 avg: 3.7
batches> min: 3 max: 3 avg: 3
draw calls> min: 3 max: 3 avg: 3
tris> min: 1704 max: 1704 avg: 1704
verts> min: 5088 max: 5088 avg: 5088
dynamic batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
static batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
player-detail> physx: 0.0 animation: 0.0 culling 0.0 skinning: 0.0 batching: 0.0 render: 0.0 fixed-update-count: 0 .. 0
scripting-scripts> update: 0.0 fixedUpdate: 0.0 coroutines: 0.0
scripting-memory> information not available on non-development player configuration
所有时间均以毫秒/帧为单位。您可以查看最近 30 帧的最小值、最大值和平均值。
| 属性 | 功能 |
|---|---|
| cpu-player | 显示应用程序在 Unity 引擎中执行代码以及在 CPU 上执行脚本所用的时间。 |
| cpu-ogles-drv__(仅限 Android) |显示在 CPU 上执行 OpenGL ES 驱动程序代码所用的时间。这些统计信息可能受绘制调用数量、内部渲染状态变化次数、渲染管线设置以及处理的顶点数量等因素的影响。| |cpu-present__(仅限 Android) | 执行 OpenGL ES 中的 presentRenderbuffer 命令所用的时间。 |
| frametime | 表示应用程序帧的总时间。注意:iOS 硬件的刷新率锁定在 60Hz,因此该属性始终返回 16.7ms (1000ms/60Hz = 16.7ms) 的倍数。 |
| 属性 | 功能 |
|---|---|
| tris # | 为渲染发送的三角形总数。 |
| verts # | 发送用于渲染的顶点总数。如果应用程序仅使用静态几何体,建议将该值保持在 10000 以下;如果应用程序包含大量蒙皮几何体实例,则该值应更低。 |
| dynamic/static batching | 引擎自动批处理的绘制调用、三角形和顶点的数量。通过与绘制调用和三角形总数进行对比,可以评估场景的批处理优化程度。为了提高批处理效率,建议在对象之间共享尽可能多的材质。 |
player-detail 部分提供了引擎内部运行的详细分解:
| 属性 | 功能 |
|---|---|
| physx | 在物理方面所用的时间。 |
| animation | 为骨骼生成动画时所用的时间。 |
| culling | 剔除摄像机视锥体外的对象所用的时间。 |
| skinning | 将动画应用于蒙皮网格所用的时间。 |
| batching | 批处理几何体所用的时间。动态几何体的批处理比静态几何体更消耗资源。 |
| render | 对可见对象进行渲染所用的时间。 |
| fixed-update-count | 在此帧期间执行的 FixedUpdates 的最小和最大次数。过多的 FixedUpdates 会显著降低性能。 |
scripting-scripts 部分提供了 Mono 运行时执行代码所花费时间的详细分解:
| 属性 | 功能 |
|---|---|
| update | 执行脚本中所有 Update() 方法的总时间。 |
| fixedUpdate | 执行脚本中所有 FixedUpdate() 方法的总时间。 |
| coroutines | 在脚本协程内所用的时间。 |
scripting-memory 部分展示了 Mono 垃圾回收器的内存管理情况:
| 属性__: |功能__: | |
|---|---|
| allocated heap | 可用于分配的总内存量。如果堆内存不足以满足分配需求,将触发垃圾回收。如果垃圾回收未能释放足够内存,分配的堆大小将增加。 |
| used heap | 在 allocated heap 中当前已由对象使用的部分。每次创建新类实例(非结构体)时,该值会增加,直到下一次垃圾回收。 |
| max number of collections | 最近 30 帧期间的垃圾收集执行次数。 |
| collection total duration | 在最近 30 帧期间发生的所有垃圾收集过程的总时间(毫秒)。 |
在 iOS 上,内部性能分析器默认禁用。要启用它,请使用以下任一方法:
要从 Xcode 项目中启用内部性能分析器,请按照以下步骤操作:
InternalProfiler.h 文件。#define ENABLE_INTERNAL_PROFILER 0
更改为
#define ENABLE_INTERNAL_PROFILER 1
要在 Unity 中启用内部性能分析器,请使用以下步骤:
注意:确保在构建应用程序时从构建设置 (Build Settings) 中启用开发构建 (Development Build) 选项。
在 Xcode 中,依次选择查看 (View) > 调试区 (Debug Area) > 激活控制台 (Activate Console) 以显示输出控制台,然后运行项目。Unity 每 30 帧会将统计信息输出到控制台窗口。