【Unity】Debug.Logをリリースビルドから簡単に完全に削除する

  • URLをコピーしました!
目次

はじめに

動作検証する際にDebug.Log()を多用すると思います。これまではリリース時にいちいちコメントアウトや削除などをしたり、logEnabled = falseにしてログが出ないようにしていました。

Debug.unityLogger.logEnabled = false;

ただ、これはログが表示されないだけで、Debug.Log()自体は呼ばれてしまいます。またDebug.Log()の処理がそもそも重いので負荷がかかったままになってしまいます。知ってはいましたが、これまで対処できていませんでした。時間ができたのでいろいろ調べたところ、割と簡単に対処できたのでサンプルコードを紹介します。

サンプルコード

using UnityEngine;

public static class DevLog
{
#if !(UNITY_EDITOR || DEVELOPMENT_BUILD)
    [System.Diagnostics.Conditional("ARASHI_ARASHI")]
#endif
	public static void Log(string msg)
	{
		Debug.Log(msg);
	}

#if !(UNITY_EDITOR || DEVELOPMENT_BUILD)
	[System.Diagnostics.Conditional("ARASHI_ARASHI")]
#endif
	public static void LogWarning(string msg)
	{
		Debug.LogWarning(msg);
	}

#if !(UNITY_EDITOR || DEVELOPMENT_BUILD)
	[System.Diagnostics.Conditional("ARASHI_ARASHI")]
#endif
	public static void LogError(string msg)
	{
		Debug.LogError(msg);
	}
}

なんと、これだけです!簡単に解説します。

if !(UNITY_EDITOR || DEVELOPMENT_BUILD)

これはUNITY_EDITORでもDEVELOPMENT_BUILDでも無い、という意味になります。EditorまたはDevelopmentBuildの時だけ有効になります。

File > Build Settings 内

[System.Diagnostics.Conditional(“ARASHI_ARASHI”)]

これは()内に指定した定数が定義されていれば下に続くメソッドを実行し、定義されていなければ実行しない、かつ呼び出し側も削除されるという機能になります。ARASHI_ARASHIの部分は、プラグインなども含めて他で定義されそうもない名前であれば何でも良いです。具体的にはProject Settings>Player>Other Settings>Scripting Define Symbolsに記載されてなければ良いです。

Project Settings >Player >Other Settings 内

一見ややこしいですが上の2つを掛け合わせることで以下を実現させています。

  • EditorまたはDevelopmentBuildの時はSystem.Diagnostics.Conditional()が無視されて普通にメソッドが呼び出されます
  • EditorまたはDevelopmentBuildのどちらでも無い時はSystem.Diagnostics.Conditional()が有効になりますが、ARASHI_ARASHIが定義されていないのでメソッドも呼び出し側も削除されます

使い方

DevLogはStaticクラスにしているのでシーンに配置する必要はありません。下記の要領で普通に他のスクリプトから呼び出して下さい。

DevLog.Log(“You are my soul soul いつもすぐそばにある♪”);

  • Debug.LogではなくDevLog.Logを使ってください
  • 開発時に端末側でログを表示したい時はDevelopmentBuildオン
  • リリース時に端末側でログを削除したい時はDevelopmentBuildオフ

以上です。アプリの負荷が少しでも軽くなれば幸いです。

参考

あわせて読みたい
#define ディレクティブ - Unity マニュアル Unityの プラットフォーム依存コンパイル 機能は、いくつかのプリプロセッサーディレクティブで構成されており、スクリプトを分割して、サポートされているプラットフォー...
KAYAC engineers' blog
C#のConditionalAttributeの条件をandやorしたい - KAYAC engineers' blog こんにちは。技術部平山です。 今回は図もサンプルもない地味な小ネタです。C#の言語機能の話なのでUnityに限りませんが、 Unity屋にわかりやすいサンプルになっています。...
強火で進め
あまり知られてないけど便利な Unity の Attribute (属性) - 強火で進め Unity 2 Advent Calendar 2015 2日目の記事です。 1日目の記事は @pigeon6 さんの「Unityでリズムゲームを作る」でした。Unity には Attribute という便利な機能が有ります...

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次