144
127

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityAdvent Calendar 2012

Day 10

Debug.Logを無効化

Last updated at Posted at 2012-12-26

UnityのDebug.Logは、製品化したときもログを吐いてしまいます。
AndroidなどでLogcatすると割と誰でもログを見れてしまうので、できれば製品版では無効化しておきたいところ。
また、Debug.Logは実はかなり負荷が高いです。一度に何十というログを出したりなどしていると、実機になった途端に謎の処理落ち頻発とかになります。「Unityじゃなんともなかったのに!なんでガクガクなの?」とかなったら疑ってみると良いかと思います。

さて、実際にログを消そうとしても、一つ一つコメントアウトしたり必要になるたびに戻す…というのは大変です。自分も困って悩んでたんですが、良いやり方を聞いたので、紹介します。

2016/7/28更新
紹介していたやり方が古かったので、新しいやり方をまとめました。

2020/6/28更新
無効化されるわけではない点が間違っていたので修正しました。

PlayerSettingsで設定する(Unity5.4から) ##

Unity5.4から、PlayerSettingsの下部にLoggingという項目が加わりました。
ss_392.png
全部止めたい場合は、これでNoneにすればよさげです。
ただし、これはスタックトレースを止めるだけで、ログメッセージ自体は出力されてしまうようです。

PlayerSettingsで設定する(Unity5.3以前) ##

5.3以前でも、PCビルドでのみですが、ログを出力を無効化する設定があったようです。
ss_391.png
なぜかPC限定で微妙に使いづらいですね。MacAppの場合ログが出ていると審査が通らないのでその対策という話も。

スクリプトから設定する(Unity5.3から) ###

スクリプトからこう書くことでログを止められるようになっているようです。

Debug.unityLogger.logEnabled = false;

普段はオフにしていても、デバッグボタンからオンにするとか使い分けができそうですね。

公式ドキュメントはこちら
http://docs.unity3d.com/ScriptReference/Logger.html

起動時に無効化するなら、こちらもの方法も参考になるかと
https://gist.github.com/tsubaki/049e68297723572b6f19709bfd2d3d6a

昔のやり方

この先は以前のやり方です。Unityのバージョンが古い場合には有効かも

やり方としては、自分で同名の「Debug」クラスを定義する。

UnityのDebugクラスは、UnityEngineというnamespaceにあるので、UnityEngine.Debugとして定義されている。なので、ネームスペースを使わずに同名クラスを定義した場合は、そちらが優先される・・・というC#の仕様を利用する。
クラスの中身はこんな感じ。


#if !UNITY_EDITOR
#define DEBUG_LOG_OVERWRAP
#endif

using UnityEngine;

#if DEBUG_LOG_OVERWRAP
public static class Debug
{
	static public void Break(){
		if( IsEnable() )	UnityEngine.Debug.Break();
	}

	static public void Log( object message ){
		if( IsEnable() ){
			UnityEngine.Debug.Log( message );
		}
	}
	static public void Log( object message, Object context ){
		if( IsEnable() ) {
			UnityEngine.Debug.Log( message, context );
		}
	}
	
	static bool IsEnable(){ return UnityEngine.Debug.isDebugBuild; }
}
#endif

Unityエディター上ではデフォルトのUnityEngine.Debugじゃないと、エディタとの連動とかで使い勝手が悪い(「コンソール出力をダブルクリックで該当ソースにジャンプ」が使えなくなります)。なので、#if !UNITY_EDITOR を使って、エディター上では定義を無効にしています。
ここに書いてるメソッドは一部なので、必要に応じてDebug.Log以外のメソッドも同様に定義を追加してください。

もちろん、自力でエディター拡張して、色々なログを吐いたりエディターと連動したりするクラスを作ったほうが何かと融通が利くと思います。
ただ、既にコードのあちこちにDebug.Logを仕込んでしまった場合はこのやり方を使えば、製品版でのログ出力を止められます。
なお、Assemblyを分けている場合はおそらく通用しないので、その点は注意してください。

144
127
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
144
127

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?