はじめに
Unityを使っている人なら、一度はDebug.Log
などのログ出力がリリースビルドに与えるオーバーヘッドを気にしたことがあると思います。
今回はログ出力のコードをビルド時には含まないようにするスクリプトを実装します。
実装
ログ出力を行うメソッドにConditional
属性をつけます。
引数にはこのメソッドを含める条件(この場合はUNITY_EDITOR
)を指定します。
Conditional
属性を付加すると、指定した条件を満たさない場合は呼び出し側のコードがコンパイルされなくなります。
下記の実装は既存のメソッドを置き換えているわけではなく、コンソールでの検索用に接頭辞などを追加したものになっているので不要な場合は適宜修正する必要があります。
DebugUtil.cs
using System.Diagnostics;
#if UNITY_EDITOR
using Debug = UnityEngine.Debug;
#endif
public static class DebugUtil
{
private const string Condition = "UNITY_EDITOR";
[Conditional(Condition)]
public static void Report(object o)
{
#if UNITY_EDITOR
Debug.Log($"Report: {o}");
#endif
}
[Conditional(Condition)]
public static void Warn(object o)
{
#if UNITY_EDITOR
Debug.LogWarning($"Warn: {o}");
#endif
}
}
使い方
通常のDebug.Log
のように呼び出します。
DebugUtil.Report($"clicked {name}");
DebugUtil.Warn($"cannot find enemies");
注意点
Conditional
属性を付加したメソッド自体はコンパイルされます(そのため#ifディレクティブで中身を囲っています)。
また、実機でデバッグを行いたい場合もログ出力が行われなくなってしまうので、その場合は指定する条件を変更するなどして調整する必要があります。