プロファイラーカウンターを加えるには、以下を行うスクリプトを作成します。
これらのセクションのコード例では、ゲームオブジェクトのトレイル効果のインスタンスごとに Unity が作成したパーティクルの総数を追跡するプロファイラーカウンターを加えます。これらの例では、ゲームオブジェクトの名前は “Tank ”です。
一部の例では Profiling Core パッケージ を使用します。これは開始前にインストールする必要があります。Unity Profiling Core パッケージはコアパッケージであるため、Package Manager UI では検出できません。パッケージをインストールするには、以下のいずれかを実行します。
新しいカウンターの作成は、以下のように行います。
重要:カウンターを作成するときは、新しいカウンターが属するプロファイラーカテゴリを指定する必要があります。これを行うには、ProfilerCategory クラスの既存の Unity カテゴリを使用します。以下の例のスクリプトは、既存の ProfilerCategory.Scripts カテゴリを使用しています。
プロファイラーカウンター API は、プッシュ操作とプル操作をサポートします。プロファイラーにカウンターの値をプッシュするか、プロファイラーからフレームの終了時に値をプルできます。
データの変更頻度が低い場合、例えばフレームごとに 1 回などの場合は、ProfilerCounter API を使用してカウンターデータをプロファイラーにプッシュします。データがフレームごとに複数回変更される場合は、ProfilerCounterValue API を使用します。これにより、プロファイラーが自動的にフレームの終了時に最後の値を取得します。
以下の例のスクリプトでは、“Tank Trail Particles” という名前と ProfilerMarkerDataUnit.Count 単位で ProfilerCounterValue TankTrailParticleCount を定義しています。
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 に作成しています。
using UnityEngine;
class TankMovement : MonoBehaviour
{
public ParticleSystem m_TrailParticleSystem;
void Update()
{
GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;
}
}
コードでカスタムプロファイラーモジュールにプロファイラーカウンターを表示するには、新しい ProfilerModule スクリプトを作成し、表示するカウンター、名前、アイコンなどのモジュールのプロパティを定義する必要があります。この方法については、プロファイラーモジュールをコードで作成 を参照してください。