開発をしている時だけ、ログ出力をさせたい!という事は多々あるかなと思いますが、その際に手軽にできるものとして、logEnabledをfalseにする方法があります。ただ、これはランタイムで設定できる為、ログ出力がされないだけで、関数に書いている処理は残っているのではないかな?と思ったので今回はそれを検証してみました。
環境
- Unity2018.3.0f2
- MacBookPro Mojave v10.14.3
実装
ボタンを押すと、Log関数内で変数をインクリメントする関数を呼ぶという処理を作ってみました。スクリプトはこんな感じに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LogTest : MonoBehaviour { [SerializeField] private Text m_text = null; private int m_count = 0; private void Start() { } private int CountUp () { ++m_count; return m_count; } public void OnClickButton () { Debug.Log( "Count:" + CountUp() ); m_text.text = "Count:" + m_count; } } |
実行して、ボタンを押した際のキャプチャがこちら

次にStart関数内でlogEnabledをfalse設定にして試したものがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LogTest : MonoBehaviour { [SerializeField] private Text m_text = null; private int m_count = 0; private void Start() { Debug.unityLogger.logEnabled = false; } private int CountUp () { ++m_count; return m_count; } public void OnClickButton () { Debug.Log( "Count:" + CountUp() ); m_text.text = "Count:" + m_count; } } |
実行して、ボタンを押してみたキャプチャがこちらです。

ログ出力はされなくなりましたが、Count表示の数は増えていきました。Debug.Log関数内に記載している処理は実行されてしまうというのがわかります。ログ出力にこういう形で処理を書く人は少ないと思いますが、処理自体が実行される為、ボトルネックになる可能性はあります。そこでConditionalを使ってみたらどうかなと思い、下記スクリプトを追加してみました。
※PlayerSettingsのScripting Defines SymbolsにENABLE_LOGGINGを記述するとLog出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using UnityEngine; public class Debug : MonoBehaviour { [RuntimeInitializeOnLoadMethod] private static void OnRuntimeMethodLoad () { #if ENABLE_LOGGING UnityEngine.Debug.unityLogger.logEnabled = true; #else UnityEngine.Debug.unityLogger.logEnabled = false; #endif } [System.Diagnostics.Conditional("ENABLE_LOGGING")] public static void Log ( object message ) { UnityEngine.Debug.Log(message); } } |
実行して、ボタンを押してみたキャプチャがこちらです。

まとめ
ログ出力を手っ取り早く無くしたい場合は、logEnabledをfalseにすれば簡単にできてしまうのでとても便利ですね。Log関数内の処理もなくしたい場合は、少し手間ですがConditionalを使ってUnityが提供している関数を全て定義しなおしてしまえばよさそうですね!