(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Debug.Log等の一括非表示【Unity】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.1.0f3 Personal

はじめに

何かと便利なDebug.Logですが、

残したままリリースしてしまうと他の人にも見られてしまう危険性があります。


ドキュメントでは以下のようにDebug.isDebugBuildを使って

デバッグビルドをした時だけ表示するといいよ!との事。

if (Debug.isDebugBuild)
  Debug.Log("This is a debug build!");


なお、DebugBuildにするにはBuild時にDevelopment Buildにチェックをいれます。


f:id:kan_kikuchi:20151110134804j:plain


この方法でもリリース時に表示させない事は可能ですが、

既に記述してあるものにifを仕込んでいくのは面倒ですし、

最初からやるにしても漏れありそうでちょっと微妙ですね。


漏れに関しては以下のようにDebugのUtilityクラスみたいなのを作ってやれば解決しますが、

public static class DebugEx{

  public static void Log(object message){
    if(!UnityEngine.Debug.isDebugBuild){
      Debug.Log (message);
    }
  }

} 


これをやるとコンソールのログをクリックしてもUtilityクラスに飛んでしまう問題が発生します。


それで結局どうするのかと言えば、以下の記事と同様の方法を使いました。

ネームスペースを使わずに同名クラスを定義した場合は、そちらが優先される・・・というC#の仕様を利用する


つまり新たにDebugというクラスを作り

そこにLogなどのメソッドを作成

その新たなメソッド内では何も実行しないようにします。


それだけだと、単純にDebugが使えなくなるだけなので、

上記記事と同様に、適宜切り替えを行えるようにしました。


HideDebugLog.cs

以下がそのコードになります。

上記記事と違い、defineで切り替えるようにしています。



このHideDebugLog.csを適当なところに作成し、

PlayerSettings - Other Settings - Scripting Define Symbols

にSHOW_DEBUGを登録するとDebug.Log等が表示されるように、

登録しないと表示されないようになります。


f:id:kan_kikuchi:20151208134128j:plain


ScriptingDefineSymbolsについては以下の記事を参照の事、



そのScriptingDefineSymbolsを楽に使うエディタ拡張もドゾー。



上記のエディタ拡張を使うと以下のような感じで設定できるようになります。


f:id:kan_kikuchi:20151208134510p:plain


なお、defineを使ったのは

エディタ上でも非表示になった事を確認したかったからです。


おわりに

Debug.Logに色をつけたり、なんてものもあるようです。



便利すな〜(:3っ)∋〜