Help us understand the problem. What is going on with this article?

Debug.Logを無効化

More than 3 years have passed since last update.

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

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

2016/7/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.logger.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を仕込んでしまった場合はこのやり方を使えば、製品版でのログ出力を止められます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした