【Unity入門】Debug.Logを完全攻略!使いこなせばこんなことまで!?

今回は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には、警告やエラーとしてログを表示することのできる類似の関数があります。

LogUnity Console にメッセージを記録します。
LogErrorDebug.Log の派生でエラーメッセージをコンソールに出力します。
LogWarningDebug.Log の派生で警告メッセージをコンソール出力します。

使用例

Debug.Log (1000);
Debug.LogError (1000);
Debug.LogWarning (1000);

結果

unity-debug-1

致命的なエラーは「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>");    //大きく表示

unity-debug-2

目立つログを用意するには有用かもしれません。

※リッチテキストについて、もっと詳細が知りたい場合は参照をご覧ください。

参照元:https://docs.unity3d.com/ja/current/Manual/StyledText.html

第二引数を利用する

実はDebug.Logには第二引数がありGameObjectを送ることができます。

送っている場合コンソールでそのログをクリックした時「Hierarcyhy」にて、そのゲームオブジェクトが強調表示されます。

Debug.Log (1000, this.gameObject);

unity-debug-3

コンソールでクリック時、強調表示されてます。

地味に便利な機能なので覚えておきましょう。

ログの出力レベル設定

※これは少し上級者むけの話なので、初心者の方は呼び飛ばしても問題ありません。

とても便利なDebug.Logですが、リリース環境ではセキュリティや処理速度の面を考えると、出力したくないですよね。

その場合は「メニューのFile」→「BuildSettings」→「PlayerSettings」→「Logging」の設定をいじりましょう。

unity-debug-6

不必要なログは、None設定にしてしまいましょう。

ちなみにFullにすると、自分の書いたスクリプト外の、細かい処理もログとして表示されます。

Debugクラスについて学んでみよう!

ここまでで「Deubg.Log」についてさまざまなことを学んできました。

いろいろなことができて便利ですね!

そして次はその大元の「Deubgクラス」について見ていきましょう。

「Deubg.Log」ばかりに目が行きがちですが「Debugクラス」にも便利な機能がたくさんあるんですよ!

これを機会に少し学んでみましょう。

一時停止ができる「Break」

Unityエディタ上で一時停止を発生させることができます。

Debug.Break ();

プログラムを使用すると、以下の画像のようにUnityエディタ上で「一時停止」ボタンを押した時と同じ挙動になります。

unity-debug-4

ブレークポイントに近い機能ですね。

いろいろなチェックに使えて便利な機能です。

Break関数の注意点

しかしこの機能一点気をつけなければなりません。

この関数は「使用した瞬間」に、プログラムが完全に停止するわけではないのです。

正確にはこの関数を使用した、次のフレームに入る前に停止をします。

次のプログラムは「Debug.Log ("step2");」の前に「Debug.Break ();」を呼んでいます。

// Use this for initialization
void Start () {

            Debug.Log ("step1");
            Debug.Break ();
            Debug.Log ("step2");

}

単純に考えれば「step1」のみ表示されて、一時停止される気がしますよね。

しかし結果は以下となります。

unity-debug-5

「step1」「step2」どちらも表示されてから停止されます。

この辺りの一時停止の仕様には気をつけましょう。

「DrawLine・DrawRay関数」によるライン描画

※これも少し上級者向けなので、初心者の人は流し見でもよいかもしれません。しかしこんなこともできることは覚えておきましょう。

DrawLine関数DrawRay関数」を使用することで、デバッグ用にScene画面内に線を引くことができます。

unity-debug-7

方向・座標の確認や、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クラスについて見てきました。

デバッグは開発には欠かせない工程です。

このクラスをうまく利用し、上手にデバッグを行いましょう!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次