版本:Unity 6 (6000.0)
语言:英语
特殊优化
平台开发

资产加载指标

使用 AsyncReadManagerMetrics 类来监控运行时资产加载和文件读取性能。此类记录有关 AsyncReadManager 管理的所有文件读取操作的数据。

Unity 引擎使用 AsyncReadManager 在运行时读取大多数文件。使用 AsyncReadManager 加载的文件包括 AssetBundles、Addressables 和 Resources。此外,您可以使用 AsyncReadManager.Read脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性以及以您喜欢的任何方式响应用户输入。 更多信息
查看 术语表
加载文件。

AsyncReadManagerMetrics 类允许您启用指标收集并检索记录的指标数据。您还可以过滤和汇总记录的数据,以帮助您进行分析。这些指标信息可以帮助您识别与资产加载相关的问题区域,以及衡量您的更改对资产加载性能的影响。

AsyncReadManagerMetrics开发版本开发版本包括调试符号并启用 Profiler。 更多信息
查看 术语表
中可用。您必须在 #if 预处理器指令中使用 ENABLE_PROFILER 符号保护对 AsyncReadManagerMetrics API 的任何调用。ENABLE_PROFILER 符号仅在开发版本中定义,因此这允许您的脚本在指标不可用的版本中进行编译。为了向后兼容,您也可以使用 UNITY_2020_2_OR_NEWER 符号从早期版本的 Unity 中删除指标代码。例如

#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerMetrics.StartCollectingMetrics();
#endif

启用指标收集

您必须在记录任何数据之前启用指标收集。使用以下方法之一启用指标收集

注意:您可以在启动 Unity 编辑器应用程序时传递 -enable-file-read-metrics 以在进入播放模式时启用收集。但是,编辑器本身加载某些类别的资产(例如纹理),并且在您进入播放模式时不会重新加载它们。为了获得您文件 IO 指标的完整概览,您必须从应用程序的开发版本中收集数据。

获取指标数据

通过调用 GetMetrics 检索由 AsyncReadManagerMetrics 类收集的指标。将 AsyncReadManagerMetrics.Flags 传递给此函数以指定是否在检索后清除指标。清除指标会从存储的指标中删除所有已完成(包括已取消和已失败)的读取操作。清除不会影响任何排队的或正在进行的操作;您可以在这些操作完成后再次调用 GetMetrics 来访问未完成操作的指标。通过定期清除指标,您可以避免重新读取相同的数据,还可以减少系统的开销。

#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif

在可能的情况下,指标数据包括有关读取操作的上下文信息。这些信息包括请求读取操作的 AssetLoadingSubsystemAssetNameAssetTypeID。当 AsyncReadManager 无法访问这些信息时,这些指标字段的值分别为 Other、空和零。

注意:目前已知支持的资产类型 ID 显示在下面的表格中。有关可能出现的其他类型 ID,请参阅 YAML 类 ID 参考

类型 ID 类型名称
28 Texture2D
117 Texture3D
89 CubeMap六个方形纹理的集合,可以表示环境中的反射或绘制在几何体后面的天空盒。这六个方格形成了围绕物体的一个假想立方体的面;每个面代表沿世界轴方向(上、下、左、右、前和后)的视图。 更多信息
查看 术语表
43 Mesh

获取汇总数据

您可以使用以下方法获取 AsyncReadManager 指标的摘要

例如

#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif

或者

#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);
#endif

指标的汇总数据包括以下统计信息

  • 平均带宽
  • 平均读取大小
  • 加载时间最长的资产类型
  • 读取次数
  • 请求次数
  • 已读取的总字节数

(有关完整列表,请参阅 AsyncReadManagerSummaryMetrics。)

默认情况下,汇总统计信息包括所有读取操作,包括排队的或正在进行的操作。您可以使用过滤器将摘要限制为您感兴趣的特定操作。例如,您可以使用过滤器将汇总统计信息限制为纹理资产的已完成读取操作。

注意:计算汇总统计信息确实需要处理资源。为了防止这些计算改变您正在记录的测量值,您可以先收集指标,并在分析的操作完成后再获取摘要。

汇总过滤器

AsyncReadManagerMetricsFilters 与这两种方法之一一起使用,以指定要汇总的数据类型。任何与过滤器不匹配的指标都将从摘要中排除。您可以使用以下类别进行过滤

您可以为同一个过滤器设置多个类别。读取操作必须匹配所有类别,才能将该操作的指标包含在摘要中。例如,您可以为 ProcessingStateSubsystem 过滤器指定值,以仅汇总指定子系统启动的指定处理状态中的操作。

您还可以为一个类别指定多个值。在这种情况下,读取操作可以匹配您为类别指定的任何值,以将其指标包含在摘要中。例如,您可以为 Subsystem 类别指定 MeshUnity 的主要图形基元。网格构成您 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、Subdiv 表面必须转换为多边形。 更多信息
查看 术语表
Texture在渲染 GameObject、Sprite 或 UI 元素时使用的图像。纹理通常应用于网格的表面,以使其具有视觉细节。 更多信息
查看 术语表
,以汇总 Mesh 和 Texture 资产的操作。

特殊优化
平台开发