今回はUnityのDebugクラスについて見ていきましょう。
その中でも一番有名な「Debug.Log関数」の使い方を、まずは説明していきますね!
そこから先は、Debug.Log以外のDebugクラスの便利な機能を見ていきましょう。
実はDebugクラスには「一時停止命令」や「線の描画」など、いろいろな有用な機能が準備されているんです。
ぜひ何ができるのか覚え、デバッグ上手になりましょう!
Debug.Logの使い方
では早速Debug.Logを使用してみましょう。
「シンプルな使い方」をはじめに「警告とエラーとしての出し方」「第二引数を利用する」など、より詳しい使い方についても見いきます。
シンプルな使い方
まずはシンプルに使用してみましょう。
以下のような「DebugObject」というクラスを作成し、オブジェクトへ紐付けていたとしましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DebugObject : MonoBehaviour { // Use this for initialization void Start () { // コンソールへ表示 Debug.Log ("debug comment"); } }
内容は非常にシンプルで、Start関数で初期化時に「Debug.Log」を呼び出しているだけです。
これを実行するとログへは以下のようなコメントが表示されます。
debug comment UnityEngine.Debug:Log(Object) DebugObject:Start() (at Assets/DebugObject.cs:11)
内容は以下の通りです。
1行目 ・・・ 第一引数に与えた文字列
2行目以降 ・・・ プログラムでDebug.Logが呼ばれた場所
文字列を送れば、その文字列と実行場所をログに表示してくれる、非常にシンプルで使いやすい関数ですね!
しかしDebug.Logの有用性はそれだけにとどまりません。
文字列以外を引数へ渡したら?
実は、Debug.Logは文字列以外も送れます。
文字列以外の物を送ってみましょう。
※行が長くなるので、これ以降の結果は1行目のみの表記とします。
数字を引数へ渡す
プログラム:
Debug.Log (1000);
実行結果:
1000
無難にちゃんと数字が出力されます。
nullを引数へ渡す
プログラム:
Debug.Log (null);
実行結果:
Null
nullを送っても、ちゃんと判断してくれます。
クラスを引数へ渡す
プログラム:
Debug.Log (this.gameObject);
実行結果:
Cube (DebugObject)
クラスを送ると、紐付いているオブジェクト名と、クラス名が帰ってきます。
※オブジェクト名がCubeなのは、今回のサンプルプログラムがCubeという名前のオブジェクトに紐付けているからです。
構造体を引数へ渡す
プログラム:
Debug.Log (new Vector3(100.0f,100.0f,100.0f));
実行結果:
(100.0, 100.0, 100.0)
中身の数値が表示されます。
地味に便利でありがたいですね。
警告とエラーとしての出し方
Debug.Logには、警告やエラーとしてログを表示することのできる類似の関数があります。
Log | Unity Console にメッセージを記録します。 |
LogError | Debug.Log の派生でエラーメッセージをコンソールに出力します。 |
LogWarning | Debug.Log の派生で警告メッセージをコンソール出力します。 |
使用例
Debug.Log (1000); Debug.LogError (1000); Debug.LogWarning (1000);
結果
致命的なエラーは「LogError」を使うなど、うまく使い分けましょう。
文字色・文字サイズの変更
使いどころは難しいかもしれませんが、Deubg.Logはリッチテキストが使えます。
それを使えば文字色などの変更が可能です。
Debug.Log ("<color=#ff0000ff>debug comment</color>"); // 赤色で表示 Debug.Log ("<color=#00ff00ff>debug comment</color>"); // 緑色で表示 Debug.Log ("<color=#0000ffff>debug comment</color>"); // 青色で表示 Debug.Log ("<i>debug comment</i>"); //斜体で表示 Debug.Log ("<b>debug comment</b>"); //太文字で表示 Debug.Log ("<size=30>debug comment</size>"); //大きく表示
目立つログを用意するには有用かもしれません。
※リッチテキストについて、もっと詳細が知りたい場合は参照をご覧ください。
参照元:https://docs.unity3d.com/ja/current/Manual/StyledText.html
第二引数を利用する
実はDebug.Logには第二引数がありGameObjectを送ることができます。
送っている場合コンソールでそのログをクリックした時「Hierarcyhy」にて、そのゲームオブジェクトが強調表示されます。
Debug.Log (1000, this.gameObject);
コンソールでクリック時、強調表示されてます。
地味に便利な機能なので覚えておきましょう。
ログの出力レベル設定
※これは少し上級者むけの話なので、初心者の方は呼び飛ばしても問題ありません。
とても便利なDebug.Logですが、リリース環境ではセキュリティや処理速度の面を考えると、出力したくないですよね。
その場合は「メニューのFile」→「BuildSettings」→「PlayerSettings」→「Logging」の設定をいじりましょう。
不必要なログは、None設定にしてしまいましょう。
ちなみにFullにすると、自分の書いたスクリプト外の、細かい処理もログとして表示されます。
Debugクラスについて学んでみよう!
ここまでで「Deubg.Log」についてさまざまなことを学んできました。
いろいろなことができて便利ですね!
そして次はその大元の「Deubgクラス」について見ていきましょう。
「Deubg.Log」ばかりに目が行きがちですが「Debugクラス」にも便利な機能がたくさんあるんですよ!
これを機会に少し学んでみましょう。
一時停止ができる「Break」
Unityエディタ上で一時停止を発生させることができます。
Debug.Break ();
プログラムを使用すると、以下の画像のようにUnityエディタ上で「一時停止」ボタンを押した時と同じ挙動になります。
ブレークポイントに近い機能ですね。
いろいろなチェックに使えて便利な機能です。
Break関数の注意点
しかしこの機能一点気をつけなければなりません。
この関数は「使用した瞬間」に、プログラムが完全に停止するわけではないのです。
正確にはこの関数を使用した、次のフレームに入る前に停止をします。
次のプログラムは「Debug.Log ("step2");」の前に「Debug.Break ();」を呼んでいます。
// Use this for initialization void Start () { Debug.Log ("step1"); Debug.Break (); Debug.Log ("step2"); }
単純に考えれば「step1」のみ表示されて、一時停止される気がしますよね。
しかし結果は以下となります。
「step1」「step2」どちらも表示されてから停止されます。
この辺りの一時停止の仕様には気をつけましょう。
「DrawLine・DrawRay関数」によるライン描画
※これも少し上級者向けなので、初心者の人は流し見でもよいかもしれません。しかしこんなこともできることは覚えておきましょう。
「DrawLine関数・DrawRay関数」を使用することで、デバッグ用にScene画面内に線を引くことができます。
方向・座標の確認や、Rayまわりのデバッグ時に役立ちますし、ツール作成時に利用するのも有用でしょう。
上記画面のスクリプトは以下の通りです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DebugObject : MonoBehaviour { void Update () { Debug.DrawLine( new Vector3( 2.0f,0.0f,0.0f), new Vector3( 2.0f,5.0f,5.0f), Color.green); Debug.DrawRay( new Vector3( 0.0f,0.0f,0.0f), new Vector3( 0.0f,5.0f,5.0f), Color.red); } }
※試す時は先ほどのDebug.Logの時と違い、Update関数の中で関数を呼び出していることに注意してください。呼び出した瞬間にしか線は描画されません。
この二つの関数は似たような機能ですが、主に第二引数の扱いが違います。
Debug.DrawLine関数
第1引数 ・・・ ラインの開始位置(ワールド座標)
第2引数 ・・・ ラインの終了位置(ワールド座標)
第3引数 ・・・ ラインの色
こちらは「どこからどこまで」といった引き方をする場合に使うことになります。
参照元:https://docs.unity3d.com/ja/current/ScriptReference/Debug.DrawLine.html
Debug.DrawRay
第1引数 ・・・ レイを開始する位置(ワールド座標)
第2引数 ・・・ レイの向きと長さ
第3引数 ・・・ ラインの色
こちらはDrawLine関数とは違い、第2引数が向きと長さになっています。
名前の通り特定のオブジェクトからRayを飛ばす場合につかえますね。
参照元:https://docs.unity3d.com/ja/current/ScriptReference/Debug.DrawRay.html
まとめ
今回はDebugクラスについて見てきました。
デバッグは開発には欠かせない工程です。
このクラスをうまく利用し、上手にデバッグを行いましょう!