Version: Unity 6.0 (6000.0)
言語 : 日本語
Analyzing asset processes
Asset Loading プロファイラーモジュール

アセットローディングメトリクス

AsyncReadManagerMetrics クラスを使用して、ランタイムのアセットのロードとファイル読み込みのパフォーマンスを監視します。このクラスは、AsyncReadManager によって管理されるすべてのファイル読み込み操作に関するデータを記録します。

Unity エンジンは、ランタイムのほとんどのファイル読み込みに AsyncReadManager を使用します。AsyncReadManager で読み込まれるファイルには、アセットバンドル、Addressables、リソースなどがあります。さらに、AsyncReadManager.Read を使用してスクリプトからファイルをロードできます。

AsyncReadManagerMetrics クラスを使用すると、メトリクスの収集を有効にして、記録されたメトリクスデータを取得することができます。また、記録されたデータをフィルタリングしたり、要約したりして分析に役立てることができます。このメトリクス情報は、アセットローディングに関する問題領域の特定や、変更がアセットローディングのパフォーマンスに与える影響の計測に役立ちます。

AsyncReadManagerMetrics クラスは開発ビルドで のみ 使用できます。AsyncReadManagerMetrics API の呼び出しは、ENABLE_PROFILER シンボルを使用して #if プリプロセッサーディレクティブ内で保護する必要があります。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 メトリクスの全体像を把握するには、アプリケーションの開発ビルドからデータを収集する必要があります。

メトリックスデータの取得

AsyncReadManagerMetrics クラスによって収集されたメトリクスは GetMetrics を呼び出して取得します。この関数に AsyncReadManagerMetrics.Flags を渡し、取得後にメトリクスを消去するかどうかを指定します。メトリクスを消去すると、保存されたメトリクスから完了したすべての読み込み (キャンセルされた読み込みと失敗した読み込みを含む) が削除されます。消去しても、キューに入っている操作や処理中の操作には影響しません。操作が未完了のメトリクスは、操作の完了後に GetMetrics を再度呼び出すことでアクセスできます。定期的にメトリクスを消去することで、同じデータの再読み込みを回避し、システムのデータオーバーヘッドも削減できます。

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

可能な場合、メトリクスデータには読み込み操作に関するコンテキスト情報が加えられます。この情報には、読み込みをリクエストした AssetLoadingSubsystemAssetNameAssetTypeID が含まれます。AsyncReadManager がこの情報にアクセスできない場合、これらのメトリクスフィールドの値は、それぞれ Other、空白、0 です。

__注意__現在サポートされている Asset TypeID は以下の表のとおりです。その他の TypeID については、YAML Class ID Reference を参照してください。

TypeID 型名
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 の両方に値を指定して、指定されたサブシステムによって開始される、指定された処理状態の操作のみを要約することができます。

1 つのカテゴリに複数の値を指定することもできます。この場合、読み込み操作は、カテゴリに指定したすべての値を照合して、そのメトリクスをサマリーに追加します。例えば、Subsystem カテゴリに メッシュテクスチャ の両方を指定して、メッシュとテクスチャの両方のアセットの操作を要約することができます。

Analyzing asset processes
Asset Loading プロファイラーモジュール