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にシェアをお願いします!