前提
- Unity 2019.4.9f1 (LTS)
参考
- Unityで完全にログを消し去る方法 (Qiita)
- 【Unity】リリース時にDebug.Logを出力しないようにする (のらくるノート)
- ConditionalAttribute クラス (MS Docs)
どうもありがとうございました。
仕組み
- ラッパークラスは、
#if !DEBUGLOG
によって、DEBUGLOG
シンボルが未定義の場合だけ有効になります。 - クラスでは、
UnityEngine.Debug
のメソッドを一通り網羅して、同名の何もしないメソッドを定義します。 - 定義されたメソッドは、
[System.Diagnostics.Conditional ("DEBUGLOG")]
によって、呼び出し自体が無視されコンパイルされません。Conditional
アトリビュートは、シンボルが未定義の際に呼び出しを無視するようにコンパイラに指示します。
- クラスが有効だと、
Debug
に対して、本来のUnityEngine.Debug
に置き換わって、このクラスが参照されます。 DEBUGLOG
シンボルが定義されるとクラスの定義自体が無効になり、UnityEngine.Debug
が使われるようになります。
使い方
- 一般に、ログを出力する際は
Project Settings
>Player
>Scripting Define Symbols
へDEBUGLOG
を記入し、除去する際は消します。 - シンボルを
DEBUG
に置き換えると、シンボルを定義せずとも、開発時は出力され、リリース時には除去されるようになります。
結果
#if !DEBUGLOG
publicclassDebug{[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,stringmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,objectmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,stringmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,objectmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssert(boolcondition,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssertFormat(boolcondition,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidAssertFormat(boolcondition,Objectcontext,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidBreak(){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidClearDeveloperConsole(){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDebugBreak(){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawLine(Vector3start,Vector3end,Colorcolor,floatduration,booldepthTest){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawLine(Vector3start,Vector3end,Colorcolor,floatduration){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawLine(Vector3start,Vector3end){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawLine(Vector3start,Vector3end,Colorcolor){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawRay(Vector3start,Vector3dir,Colorcolor,floatduration){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawRay(Vector3start,Vector3dir,Colorcolor,floatduration,booldepthTest){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawRay(Vector3start,Vector3dir){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidDrawRay(Vector3start,Vector3dir,Colorcolor){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLog(objectmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLog(objectmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogAssertion(objectmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogAssertion(objectmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogAssertionFormat(Objectcontext,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogAssertionFormat(stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogError(objectmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogError(objectmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogErrorFormat(stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogErrorFormat(Objectcontext,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogException(System.Exceptionexception,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogException(System.Exceptionexception){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogFormat(Objectcontext,stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogFormat(stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogWarning(objectmessage){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogWarning(objectmessage,Objectcontext){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogWarningFormat(stringformat,paramsobject[]args){}[System.Diagnostics.Conditional("DEBUGLOG")]publicstaticvoidLogWarningFormat(Objectcontext,stringformat,paramsobject[]args){}}#endif