Unity:ログの出力(Debug.Log編)

最終更新日



はじめに

Unity ではログ表示を行える機能が標準で搭載されています、今回は Debug.Log の使い方をご紹介いたします。

Unityを知らない方は、ぜひ こちらの記事 をご参照ください。

ログ出力の関連記事

使い方

Console ウィンドウの表示

Unity の標準で使える、Debug.Log を使ってみたいと思います。

まずは、ログが出力されるウィンドウを表示します。
「Window」>「General」>「Console」を選択してください。すると、Consoleウィンドウが表示されます。

Debug.Log

さっそくログを出力するスクリプトを書いて、実行します。

using UnityEngine;

public class LogScript : MonoBehaviour
{
    void Start()
    {
        Debug.Log("log output");
    }
}

上記のスクリプトを実行すると、こんな感じで出力されます。
出力したデータとは別に「UnityEngine.Debug:Log(Object)」と表示されています、これについてはのちほど説明します。

出力されたデータの確認

実際に出力されたデータを確認してみます、ログをクリックすると以下のようにデータが表示されます。

「log output」に関してはログ出力で指定した文字列になります。

以下の出力されたログは、スタックとレースと呼ばれており、呼び出された関数の順番が表示されています。
「UnityEngine.Debug:Log(Object)」
「LogScript:Start() (at Asset/LogScripts.cs:7)」

例えば以下のような、スクリプトの場合


using UnityEngine;

public class LogScript : MonoBehaviour
{
    void Start()
    {
        Func1();
    }

    void Func1()
    {
        Func2();
    }

    void Func2()
    {
        Func3();
    }

    void Func3()
    {
        Debug.Log("log output");
    }
}

以下のように、下→上に向かって関数の呼び出し順番で表示されます。また「LogScript.cs:22」のように対象スクリプトの行数がわかるので探索が行えます。

同じログはまとめられる

同一のログが大量に出力される場合、「Collapse」が有効になっていると、以下のように「726」などのラベルが表示されます。これは 726回 同じログが出力を簡略化した形になります。

「Collapse」がオフの場合は以下のように大量に表示されます。

ログレベル

ログの出力には3レベルあります。

  • Info:正常
  • Warning:警告
    • 一般的に、プログラムは実行可能だが、問題がある
  • Error:エラー
    • 一般的に、プログラムが実行不可能な問題
Debug.Log("info");
Debug.LogWarning("Warning");
Debug.LogError("Error");

また、警告/エラーなどが表示されない場合は、右上のボタンで表示・非表示の制御をしてください。

出力フォーマットの指定

また、Debug.Log は文字列だけではなく、int / float などの指定も行えます。

string s = "string test";
Debug.Log(s);

int i = 123;
Debug.Log(i);

float f = 0.987f;
Debug.Log(f);

また、次のように記述すれば文字列に指定の値を埋め込みが行えます。

int i = 123;
float f = 0.987f;
Debug.Log($"int={i} float={f}");

書式指定もできます。その場合には、Debug.LogFormatを使用してください。

Debug.LogFormat("fomrt {0}", 111);

LogFormat を使うのがめんどくさい人は、 Debug.Logを使って「$""」を使った書式指定をお勧めします。

float f = 0.987f;
Debug.Log($"float={f:0.00}");

オブジェクトを指定すると?

空のオブジェクトを指定すると、、、

using UnityEngine;

public class LogScript : MonoBehaviour
{
    public class Data
    {
    }

    void Start()
    {
        Data data = new Data();
        Debug.Log(data);
    }
}

「LogScript+Data」が出力されました。
これはネームスペース+クラス名みたいな感じででますね。

空のオブジェクトではなく、ToString を Override すると、、、

using UnityEngine;

public class LogScript : MonoBehaviour
{
    public class Data
    {
        int a = 1;
        int b = 2;

        public override string ToString()
        {
            return $"a({a}) + b({b}) = {a + b}";
        }
    }

    void Start()
    {
        Data data = new Data();
        Debug.Log(data);
    }
}

思った通りのログが出力されましたね。

Logger を使う

Unity の内部実装のロガーがさわれるようになっていたので簡単に確認してみました。

ログレベルの変更

以下のようにログレベル(フィルター)を変更すると、指定レベル以上のログしか表示されなくなります。

        Debug.unityLogger.filterLogType = LogType.Warning;
        Debug.Log("Info");
        Debug.LogWarning("Warning");
        Debug.LogError("Error");

ここでは Warning を指定しているため、Warning・Error が表示されます。

ログの出力制御

logEnabled を制御すると、ログの出力ON/OFF を制御できます。

        Debug.unityLogger.logEnabled = true;
        Debug.Log("Info 1");
        Debug.unityLogger.logEnabled = false;
        Debug.Log("Info 2");
        Debug.unityLogger.logEnabled = true;
        Debug.Log("Info 3");

以下では、「Info 2」が出力されませんでした。

疑問点

何件くらい出力できるの?

しばらく実行してみましたが10000くらいは平気で出力できました。

Release の時に完全にログ出力を消す

Unityで完全にログを消し去る方法」があったのでリンクさせてもらいます。

関連リンク







よければ、SNSにシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする