Debugクラスの関数を無効にする方法
この記事では、UnityでUnityEngine.Debugクラスの関数を無効にするクラスの作り方について説明します。
作り方
同名のクラスを作成する
Debug
クラスを上書きするため、同名の静的クラスを作ります。
public static class Debug
{
}
Debugクラスにある静的メンバ関数を同名のクラスに「空」で定義する
Debug
クラスの定義を確認し、その中にある静的メンバ関数を同名のクラスに「空」で定義します。
using UnityEngine;
public static class Debug
{
public static void Assert( bool condition, string format, params object[] args ) {}
public static void Assert( bool condition, string message, Object context ) {}
public static void Assert( bool condition ) {}
public static void Assert( bool condition, object message, Object context ) {}
public static void Assert( bool condition, string message ) {}
public static void Assert( bool condition, object message ) {}
public static void Assert( bool condition, Object context ) {}
public static void AssertFormat( bool condition, Object context, string format, params object[] args ) {}
public static void AssertFormat( bool condition, string format, params object[] args ) {}
public static void Break() {}
// 他の関数もすべて定義
}
#endif
関数呼び出しを無視させるためにConditional属性を付ける
関数を呼び出した際に無視させるため、関数にダミーのシンボルを対象としたConditional
属性を付けます( シンボル名はなんでもよいですが、ここでは「"DUMMY"
」とします )。
using UnityEngine;
using System.Diagnostics;
public static class Debug
{
[Conditional("DUMMY")] public static void Assert( bool condition, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, string message, Object context ) {}
[Conditional("DUMMY")] public static void Assert( bool condition ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, object message, Object context ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, string message ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, object message ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, Object context ) {}
[Conditional("DUMMY")] public static void AssertFormat( bool condition, Object context, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void AssertFormat( bool condition, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void Break() {}
// 他の関数もすべて定義
}
クラスの有効・無効を切り替えられるようにする
#if
、 #endif
ディレクティブを利用して、DISABLE_DEBUG_FUNCTIONS
というシンボルが定義されている場合のみコンパイルするようにします。これでDebug
クラスの関数を無効にするクラスは完成です。
#if DISABLE_DEBUG_FUNCTIONS
using UnityEngine;
using System.Diagnostics;
public static class Debug
{
[Conditional("DUMMY")] public static void Assert( bool condition, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, string message, Object context ) {}
[Conditional("DUMMY")] public static void Assert( bool condition ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, object message, Object context ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, string message ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, object message ) {}
[Conditional("DUMMY")] public static void Assert( bool condition, Object context ) {}
[Conditional("DUMMY")] public static void AssertFormat( bool condition, Object context, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void AssertFormat( bool condition, string format, params object[] args ) {}
[Conditional("DUMMY")] public static void Break() {}
// 他の関数もすべて定義
}
#endif
使い方
「Project Settings」>「Player」> 「Other Settings」 > 「Scripting Define Symbols」に「DISABLE_DEBUG_FUNCTIONS
」を入力します。
これで作成したクラスが有効化( UnityEngine.Debug
クラスが上書き )され、Debug
クラスの関数を無効にできます。
注意点
下記の場合は作成したクラスを有効にしても、UnityEngine.Debug
クラスの関数が呼ばれるため、注意してください。
UnityEngineの名前空間の中で関数を呼び出した時
namespace UnityEngine
{
public class Test : MonoBehaviour
{
void Start()
{
Debug.Log( "この文字列は出力されます。" );
}
}
}
明示的にUnityEngineの名前空間を指定した時
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
Debug.Log( "この文字列は出力されません。" );
UnityEngine.Debug.Log( "この文字列は出力されます。" );
}
}