注意:内置分析器已弃用,将在 Unity 的未来版本中移除。请改用 分析器窗口(菜单:窗口 > 分析 > 分析器)。有关如何分析 iOS 设备的更多信息,请参阅 在 iOS 设备上收集性能数据。
Unity 包含一个内置的 分析器一个帮助您优化游戏的窗口。它显示在游戏的各个区域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
请参阅 术语表,用于提供有关应用程序运行方式的见解。内置分析器每 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 以下。如果您的应用程序使用许多蒙皮几何体的实例,则此数字应低得多。 |
动态/静态批处理 | 引擎自动批处理的绘制调用、三角形和顶点的数量。将这些数字与绘制调用和三角形总数进行比较,可以了解您的 场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,从本质上讲是分段设计和构建您的游戏。 更多信息 请参阅 术语表 为批处理准备的程度。在对象之间共享尽可能多的材质以改进批处理。 |
player-detail 部分提供了引擎内部发生情况的详细细分
属性 | 函数 |
---|---|
physx | 在物理上花费的时间。 |
animation | 花费在动画骨骼上的时间。 |
culling | 花费在剔除 摄像机一个组件,它创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息 请参阅 术语表 视锥体外的对象上的时间。 |
蒙皮将骨骼关节绑定到角色网格或“皮肤”顶点的过程。使用外部工具(如 Blender 或 Autodesk Maya)执行。 更多信息 请参阅 术语表 |
花费在将动画应用于蒙皮网格上的时间。 |
batching | 花费在批处理几何体上的时间。动态几何体的批处理比静态几何体的批处理消耗更多的资源。 |
render | 花费在渲染可见对象上的时间。 |
fixed-update-count | 在此帧期间执行的 FixedUpdate 的最小和最大数量。过多的 FixedUpdate 会大大降低性能。 |
scripting-scripts 部分提供了在 Mono 运行时执行代码所花费时间的详细细分
属性 | 函数 |
---|---|
update | 执行脚本中所有 Update() 方法的总时间。 |
fixedUpdate | 执行脚本中所有 FixedUpdate() 方法的总时间。 |
coroutines | 在脚本协程内花费的时间。 |
scripting-memory 部分让您了解 Mono 垃圾回收器如何管理内存
属性: | 函数: |
---|---|
allocated heap | 可用于分配的内存总量。如果堆没有足够的内存用于给定的分配,则会触发垃圾回收。如果这没有释放足够的内存,则分配的堆的大小将增加。 |
used heap | allocated heap 的一部分,当前被对象占用。每次创建新的类实例(而不是结构体)时,此数字都会增加,直到下一次垃圾回收。 |
最大回收次数 | 过去 30 帧中垃圾回收传递的次数。 |
回收总持续时间 | 过去 30 帧中发生的垃圾回收的所有传递的总时间(以毫秒为单位)。 |
在 iOS 上,默认情况下禁用内置分析器。要启用它,请使用以下任一过程。
要从 Xcode 项目内部启用内置分析器,请使用以下步骤
InternalProfiler.h
文件。#define ENABLE_INTERNAL_PROFILER 0
更新为
#define ENABLE_INTERNAL_PROFILER 1
要启用 Unity 中的内置分析器,请使用以下步骤
注意:在构建应用程序时,请确保从构建设置中启用了开发版本开发版本包含调试符号并启用分析器。 更多信息
请参阅 术语表 选项。
要显示输出控制台,请在 Xcode 中选择查看 > 调试区域 > 激活控制台,然后运行您的项目。Unity 每 30 帧将统计信息输出到控制台窗口。