# コードへのプロファイラーカウンターの追加

> Collect specific statistics with profiler counters.

プロファイラーカウンターを加えるには、以下を行うスクリプトを作成します。

* [新しいカウンターの作成と定義](#creating-and-defining-a-counter)。
* [カウンター値の更新](#updating-a-counters-value)。

これらのセクションのコード例では、ゲームオブジェクトのトレイル効果のインスタンスごとに Unity が作成したパーティクルの総数を追跡するプロファイラーカウンターを加えます。これらの例では、ゲームオブジェクトの名前は "Tank "です。

## 前提条件

一部の例では [Profiling Core パッケージ](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest) を使用します。これは開始前にインストールする必要があります。Unity Profiling Core パッケージはコアパッケージであるため、Package Manager UI では検出できません。パッケージをインストールするには、以下のいずれかを実行します。

* `com.unity.profiling.core` という [名前を使って追加](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/quick.md) します。
* [このリンクから](/engine/6000.0/manual/com-unity-profiling.md) インストールします。

## カウンターの作成と定義

新しいカウンターの作成は、以下のように行います。

1. 新しいカウンターの値の型を定義するスクリプトを作成します。
2. この型に名前と単位を割り当てます。

\*\*重要：\*\*カウンターを作成するときは、新しいカウンターが属するプロファイラーカテゴリを指定する必要があります。これを行うには、[`ProfilerCategory`](/engine/6000.0/manual/unity-profiling.md) クラスの既存の Unity カテゴリを使用します。以下の例のスクリプトは、既存の `ProfilerCategory.Scripts` カテゴリを使用しています。

プロファイラーカウンター API は、プッシュ操作とプル操作をサポートします。プロファイラーにカウンターの値をプッシュするか、プロファイラーからフレームの終了時に値をプルできます。

データの変更頻度が低い場合、例えばフレームごとに 1 回などの場合は、[`ProfilerCounter`](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/api/Unity.Profiling.ProfilerCounter-1.html) API を使用してカウンターデータをプロファイラーにプッシュします。データがフレームごとに複数回変更される場合は、`ProfilerCounterValue` API を使用します。これにより、プロファイラーが自動的にフレームの終了時に最後の値を取得します。

以下の例のスクリプトでは、"Tank Trail Particles" という名前と [ProfilerMarkerDataUnit.Count](/engine/6000.0/script-reference/unity-profiling/profiler-marker-data-unit/count.md) 単位で [`ProfilerCounterValue`](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/api/Unity.Profiling.ProfilerCounter-1.html) `TankTrailParticleCount` を定義しています。

```lang-csharp
public static class GameStats
{
   public static readonly ProfilerCategory TanksCategory = ProfilerCategory.Scripts;

   public const string TankTrailParticleCountName = "Tank Trail Particles";
   public static readonly ProfilerCounterValue<int> TankTrailParticleCount =
       new ProfilerCounterValue<int>(TanksCategory, TankTrailParticleCountName, ProfilerMarkerDataUnit.Count,
           ProfilerCounterOptions.FlushOnEndOfFrame | ProfilerCounterOptions.ResetToZeroOnFlush);
}
```

オプション `FlushOnEndOfFrame` と `ResetToZeroOnFlush` は、自動的にカウンターを Profiler データストリームに送り、フレームの終了時に Count 値を 0 にリセットします。

## カウンター値の更新

カウンターの値を更新するには、定義したカウンターの値を設定する MonoBehaviour スクリプトを作成します。

以下の MonoBehaviour スクリプトでは、Update 関数において、割り当てられたゲームオブジェクトに属するトレイルパーティクルの数をフレームごとに数えています。これを行うために、`TankTrailParticleCount` というカウンターを使用しています。

また、以下のサンプルスクリプトでは、Trail Particle System (`m_TrailParticleSystem`) というパブリックプロパティを Inspector に作成しています。

```lang-csharp
 using UnityEngine;

 class TankMovement : MonoBehaviour
 {
    public ParticleSystem m_TrailParticleSystem;

    void Update()
    {
        GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;
    }
 }
```

### カスタムプロファイラーモジュールへのプロファイラーカウンターの追加

コードでカスタムプロファイラーモジュールにプロファイラーカウンターを表示するには、新しい `ProfilerModule` スクリプトを作成し、表示するカウンター、名前、アイコンなどのモジュールのプロパティを定義する必要があります。この方法については、[プロファイラーモジュールをコードで作成](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing/creating-custom-modules.md#creating-profiler-modules-code) を参照してください。

## 追加リソース

* [コードへのプロファイリング情報の追加の概要](/engine/6000.0/manual/analysis/profiler/adding-information-code/intro.md)
* [コードへのプロファイラーマーカーの追加](/engine/6000.0/manual/analysis/profiler/adding-information-code/add-markers-code.md)
* [Profiler モジュールのカスタマイズ](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing.md)
* [Profiling Core パッケージ](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest)
