注意:内部的性能分析器已被弃用,在 Unity 的未来版本中将不再使用。请改用 Profiler 窗口(菜单:Window > Analysis > Profiler)。
Unity 包含适用于 iOS 和 Android 的内置性能分析器。内置性能分析器每 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
所有时间均以毫秒/帧为单位。可以查看最近三十帧的最短时间、最长时间和平均时间。
属性 | 功能 |
---|---|
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 上,内部性能分析器默认处于禁用状态。要启用,请打开 Unity 生成的 Xcode 项目,选择 InternalProfiler.h
文件,将以下行
# define ENABLE_INTERNAL_PROFILER 0
更改为
# define ENABLE_INTERNAL_PROFILER 1
或者,访问 iOS 的 Player Settings(菜单:Edit > Project Settings > Player Settings,然后选择 iOS)。在 Debugging and crash reporting 部分中,启用 Enable Internal Profiler (Deprecated) 设置。在构建应用程序时,确保在 Build Settings 中启用了 Development Build。
要显示输出控制台 (GDB),请从 Xcode 的主菜单中选择 __View > Debug Area > Activate Console__,然后运行项目。然后,Unity 每 30 帧就会将统计信息输出到控制台窗口。
要在 Android 上启用内部性能分析器,请访问 Android 的 Player Settings(菜单:Edit > Project Settings > Player Settings,然后选择 Android)。在 Optimization 部分中,启用 Enable Internal Profiler (Deprecated) 设置。在构建应用程序时,确保在 Build Settings 中启用了 Development Build。应用程序在设备上运行时,统计信息将显示在 logcat 中。要查看 logcat,请确保安装了 adb 或 Android Debug Bridge,然后运行 shell 命令 adb logcat
。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.