Version: Unity 6.0 (6000.0)
语言 : 中文
移动平台优化
优化 iOS 播放器的体积

使用内置性能分析器来衡量性能

注意:内部的性能分析器已被弃用,并将在 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 活动

属性 功能
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 引擎自动批处理的绘制调用、三角形和顶点的数量。通过与绘制调用和三角形总数进行对比,可以评估场景的批处理优化程度。为了提高批处理效率,建议在对象之间共享尽可能多的材质。

详细 Unity Player 统计信息

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 项目

要从 Xcode 项目中启用内部性能分析器,请按照以下步骤操作:

  1. 打开 Unity 生成的 Xcode 项目。
  2. 选择 InternalProfiler.h 文件。
  3. 修改以下代码:
#define ENABLE_INTERNAL_PROFILER 0

更改为

#define ENABLE_INTERNAL_PROFILER 1

播放器设置 (Player settings)

要在 Unity 中启用内部性能分析器,请使用以下步骤:

  1. 在主菜单中,转到编辑 (Edit) > 项目设置 (Project Settings) > 播放器设置 (Player Settings)> iOS
  2. Debugging and crash reporting 部分中,启用 Enable Internal Profiler (Deprecated) 选项。

注意:确保在构建应用程序时从构建设置 (Build Settings) 中启用开发构建 (Development Build) 选项。

显示控制台

在 Xcode 中,依次选择查看 (View) > 调试区 (Debug Area) > 激活控制台 (Activate Console) 以显示输出控制台,然后运行项目。Unity 每 30 帧会将统计信息输出到控制台窗口。

移动平台优化
优化 iOS 播放器的体积