コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Attribute を指定するだけでプロパティや関数の呼び出し時にログ出力できる「Cecil Attributes」紹介

はじめに

「Cecil Attributes」を Unity プロジェクトに導入することで
Attribute を指定するだけでプロパティや関数の呼び出し時にログ出力できるようになります

ResetStaticAttribute

// デフォルトでは Subsystem Registration のタイミングで
// default 値に初期化されます
// Enter Play Mode を使用しているプロジェクトで特に役に立ちます
// static なフィールド / プロパティ / イベントに対応しています
[ResetStatic] private static int m_count = 10;

LogCalledAttribute

// プロパティの get や set が呼び出された時にログ出力されます
// get が呼び出された時は戻り値がログ出力されます
// set が呼び出された時は古い値と新しい値がログ出力されます
[LogCalled( logPropertyGet: true, logPropertySet: true )] 
private int Id { get; set; }
// 関数が呼び出された時にログ出力します
[LogCalled]
private static void HeavyMethod()
{
    Thread.Sleep( 1000 );
}

TimedAttribute

// 関数やプロパティの実行にかかった時間をログ出力します
[Timed]
private static void HeavyMethod()
{
    Thread.Sleep( 1000 );
}

MarkInProfilerAttribute

// 関数の開始と終了に Profiler.BeginSample / EndSample が仕込まれます
[MarkInProfiler]
private static void HeavyMethod()
{
    Thread.Sleep( 1000 );
}

使用例

f:id:baba_s:20220121161958p:plain

設定変更

f:id:baba_s:20220121162033p:plain

Project Settings の「Hertzole > Cecil Attributes」を選ぶと各種設定ができます

検証環境

  • Windows 10
  • Unity 2021.2.7f1
  • Android 9.0 IL2CPP