コードへのプロファイラーマーカーの追加
Add profiler markers to mark up areas of your code.
読み終わるまでの所要時間 9 分最終更新 1ヶ月前
コードに プロファイラーマーカー を追加して、Profiler ウィンドウ の CPU Usage モジュール の Timeline ビュー と Hierarchy ビュー に、、、または が生成するサンプルを表示します。
ProfilerMarker.BeginProfilerMarker.EndProfilerMarker.Auto
Timeline ビューのメタデータを持つプロファイラーサンプル
*

Hierarchy ビューのメタデータを持つプロファイラーサンプル
前提条件
一部の例では Profiling Core パッケージ を使用します。これは開始前にインストールする必要があります。Unity Profiling Core パッケージはコアパッケージであるため、Package Manager UI では検出できません。パッケージをインストールするには、以下のいずれかを実行します。
コードのマークアップ
ProfilerMarkerProfilerMarker.BeginProfilerMarker.Endusing UnityEngine;using Unity.Profiling;public class ProfilerMarkerExample{ static readonly ProfilerMarker k_MyCodeMarker = new ProfilerMarker("My Code"); void Update() { k_MyCodeMarker.Begin(); Debug.Log("This code is being profiled"); k_MyCodeMarker.End(); }}
**注:**プロファイラーマーカーの名前に 文字を使用しないでください。Profiler ウィンドウが CPU Profiler モジュールのチャートビューでマーカーを強調表示できなくなります。
/EndBeginEndEndEndAutoUnity は、プロファイルされたコードブロックの実行時間を記録してプロファイラーに報告し、Deep Profiling を使用せずに CPU Profiler モジュール に表示します。以下のように、CPU Profiler モジュールの Hierarchy ビュー に新しいエントリーとして表示されます。

Profiler ウィンドウのプロファイラーサンプル
プロファイラーマーカーのコードブロックの自動終了
ProfilerMarker.AutoProfilerMarker.Endusing Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { k_UpdatePerfMarker.Begin(); // ... k_UpdatePerfMarker.End(); using (k_UpdatePerfMarker.Auto()) { // ... } }}
Begin()End()ProfilerMarker.AutoProfilerMarker.Autousing varEndProfilerMarkerusing Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { using var _ = k_UpdatePerfMarker.Auto(); // ... }}
注: でマークアップされたエリア内の async 呼び出しおよび 呼び出しはサポートされておらず、 を使用している場合でもコンソールにエラーメッセージが記録されます。
ProfilerMarkerawaityieldAutoサンプルへの整数または浮動小数点パラメーターの追加
コードサンプルにコンテキストを追加して、コードが長時間実行される特定の条件を特定する必要がある場合があります。
例えば、システムがオブジェクトのシミュレーションを実行する場合、プロファイラーサンプルでオブジェクトの数を渡すことができます。プロファイラーが長いサンプル継続時間とともに異常な数値を返す場合は、シミュレーションに別のスレッドを使用するか、CPU 処理を複数のフレームに分割するか (タイムスライス)、アプリケーションの設計を調整してフレーム落ちを防ぐ必要がある可能性があります。
ProfilerMarkerProfilerMarker<TP1>ProfilerMarker<TP1, TP2>ProfilerMarker<TP1, TP2, TP3>using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker<int> k_PreparePerfMarker = new ProfilerMarker<int>("MySystem.Prepare", "Objects Count"); static readonly ProfilerMarker<float> k_SimulatePerfMarker = new ProfilerMarker<float>(ProfilerCategory.Scripts, "MySystem.Simulate", "Objects Density"); public void Update(int objectsCount) { k_PreparePerfMarker.Begin(objectsCount); // ... k_PreparePerfMarker.End(); using (k_SimulatePerfMarker.Auto(objectsCount * 1.0f)) { // ... } }}
サンプルへの文字列パラメーターの追加
ProfilerMarkerProfilerMarkerExtensionusing Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_PreparePerfMarker = new ProfilerMarker("MySystem.Prepare"); public void Prepare(string path) { k_PreparePerfMarker.Begin(path); // ... k_PreparePerfMarker.End(); }}