ネイティブ開発の名残でプリプロセッサで制御していましたが、もっといい方法がありました。
失敗例
ラッパーを作ってプリプロセッサで制御
class Debug{
public static void Log(System.Object msg){
#if DEBUG
UnityEngine.Debug.Log (msg);
#endif
}
}
logEnabledの設定
UnityEngine.Debug.unityLogger.logEnabled = false;
成功例
ラッパーを作ってConditional属性で制御
(Scripting Define SymbolsにLOG_ENABLE追加)
#if (LOG_ENABLE == false)
class Debug{
[Conditional("LOG_ENABLE")]
public static void Log(System.Object msg){
}
}
#endif
ラッパーの中でログ出力すると、consoleWindowsからジャンプしづらいので
ログ有効時はクラス自体を消すようにしています。
まとめ
失敗例のコードでもログを表示させないことはできています。
しかし、関数呼び出しは評価されるため以下のような文字列を大量につなげるコードがあった場合GCが多発します。
string log = "0123456789";
Debug.Log(
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log +
log + log + log + log + log + log + log + log + log + log
);
Conditional属性は呼び出し元を消去するため問題ありません。
今更感ある内容かもしれませんがご参考になれば幸いです