週刊SleepNel新聞

SleepNel所属のぽうひろが日々の個人開発で気になったことを綴ります。

Unityブレークポイントを使ったデバッグ方法 [VisualStudio Community2019編]

こんにちは、ぽうひろです。

最近、大学や専門学校でUnity講師をやらせていただいているのですが、

意外とブレークポイントを使ったデバッグ方法がわからない」といった声を聞きますので、ここに記しておきたいと思います。

f:id:pouhiroshi:20210601181005p:plain

こんなSceneがあったとします。 画像にはTest.cs がアタッチされています。

using UnityEngine;

public class Test : MonoBehaviour
{
    float x = 10f;
    Transform transform;

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
        transform = GetComponent<Transform>();
    }

    // Update is called once per frame
    void Update()
    {
        transform.position += new Vector3(0.1f, 0f,0f);
        x += 1f;

        Debug.Log("Update");
    }
}

このプログラムにブレークポイントをいれてデバッグしていこうと思います。

f:id:pouhiroshi:20210601181002p:plain

UnityからTest.csをダブルクリックすると、VisualStudioが開くと思います。

ブレークポイントを使ったデバッグを行うには、上部にある「Unityにアタッチ」ボタンを押します。

f:id:pouhiroshi:20210601181020p:plain

その後、処理を止めたいコードの行番号の左あたりをクリックします。 すると赤い丸がつき、その行が赤くハイライトします。 この部分のプログラムが実行されると、ここで処理を一時停止することができます。 これがブレークポイントです。1つだけではなく複数個所に設定できます。 これで準備はOKです。

ではこの状態でUnity側で再生ボタンをおして実行しましょう。

f:id:pouhiroshi:20210601181000g:plain

Update()が実行され、ブレークポイント黄色くなりました。ここで処理が一時停止しています!

f:id:pouhiroshi:20210601181017g:plain

一時停止したのち、右上のステップオーバーボタンを押すと、1行処理をすすめることができます。 黄色い部分が現在実行中のプログラム行です。

プログラムの下にはその時点の変数の中身も見ることができる「ローカル」というタブも見えますね。 x変数が増えているのが確認できると思います。

一時停止を終了し、後続の処理を続ける場合は「続行ボタン」を押します。 今回の例ではUpdate()内にブレークポイントをいれているので、すぐ次のUpdate()呼び出しがあり、また同じブレークポイントで一時停止することになります。

f:id:pouhiroshi:20210601182606g:plain

ですので、「続行」をどんどん押していくと、xが1ずつ増えていっているのが確認できますね!

ブレークポイントは、ちゃんと自分が意図したとおりにこのプログラムが呼び出されているか?の確認にも使えます。 例えば、OnCollisionEnterなどのUnityできめられたメソッドを実装した際、スペルミスなどがあるとコンパイルエラーは出ないけど、呼ばれないので思った通りに動かないというケースがありますが、それを調べるのにも使えますね。 呼ばれていないのであれば、ブレークポイントをいれて実行しても一時停止しません。これで何かスペルミスがあるんだなと気づくことができます。

いかがでしたでょうか。 Debug.Logによる確認は限界がありますので、ブレークポイントをつかって変数の内容を確認しながらデバッグを行うと、プログラム制作も格段に効率が上がります。 ぜひ、ブレークポイントデバッグを身に着けて効率よくデバッグを行えるようになりましょう!!