デバッグの基本:ログとエラーの見方【Unityスタートガイド5-3】

目次

この記事で学べること

  • Consoleウィンドウの基本的な使い方
  • Debug.Logでログを出力する方法
  • Warning(警告)とError(エラー)の違い
  • エラーメッセージの読み解き方
  • スタックトレースの見方と活用法
  • よくあるエラーの対処法

前提知識

この記事は、以下の記事の内容を理解していることを前提としています:

  • 再生モードでゲームをテストしよう:再生モードの基本操作
    • スクリプトの書き方は第6章で詳しく説明します。この記事では、スクリプトは「コピーして貼り付けて試す」だけでOKです

Consoleウィンドウとは?

Consoleウィンドウは、Unityエディタで最も重要なデバッグツールの一つです。ゲームの実行中に発生する様々な情報(ログ、警告、エラー)を表示し、開発者が問題を特定するのに役立ちます。

Consoleウィンドウの開き方:

  1. Unityエディタの下部パネルで「Console」タブをクリック
  2. または、Window>General>Console(ショートカット:Ctrl+Shift+C、Macの場合はCmd+Shift+C)
スライム

Consoleウインドは横幅が狭いとボタンが非表示になるものがあります。違和感ある場合は横に伸ばしてみて!

ログの種類と色分け

Consoleには3種類のメッセージが表示されます。それぞれ色分けされて表示されるので、一目で種類がわかります。

通常ログ(白/黒色)

  • 意味: 通常の情報メッセージ
  • 色: 通常のテキスト色(白または黒)
  • 使用例: デバッグ情報、進行状況の報告

警告(Warning – 黄色)

  • 意味: 潜在的な問題があるが、ゲームの実行は継続可能
  • 色: 黄色
  • 使用例: 非推奨のAPI使用、古い設定の使用

エラー(Error – 赤色)

  • 意味: 深刻な問題が発生し、ゲームの実行に影響
  • 色: 赤色
  • 使用例: スクリプトエラー、Null参照、コンパイルエラー

Debug.Logでログを出力しよう

スクリプトからConsoleにメッセージを出力するには、Debug.Log()関数を使います。

試してみよう

  1. Projectウィンドウで右クリック>Create>MonoBehaviour Script
  2. 名前を「ExampleScript」にする(ファイル名とクラス名は同じにする必要があります)
  3. ダブルクリックでVS Codeで開き、下のコードに置き換えて保存
  4. Hierarchyで右クリック>Create Emptyで空のオブジェクトを作り、ExampleScriptをドラッグ&ドロップでアタッチ
  5. 再生して、Consoleを確認

基本的な使い方

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // 基本的なログ出力
        Debug.Log("Hello Unity!");

        // 変数の値をログに出力
        int score = 100;
        Debug.Log("Score: " + score);

        // より便利な書き方(文字列補間)
        Debug.Log($"Score: {score}");
    }
}

実行結果(Consoleウィンドウ):

エラーメッセージの読み解き方

エラーが発生したとき、Consoleに表示されるメッセージを正しく読み解くことが重要です。

典型的なエラーメッセージの構造

NullReferenceException: Object reference not set to an instance of an object
ExampleScript.Update () (at Assets/Scripts/ExampleScript.cs:15)

分解して読む:
1. エラーの種類: NullReferenceException
2. エラーの説明: Object reference not set to an instance of an object
3. 発生場所: ExampleScript.Update ()
4. ファイルと行数: (at Assets/Scripts/ExampleScript.cs:15)

スタックトレースの見方

エラーのメッセージをクリックすると、Consoleの下の欄に「スタックトレース」が表示されます。エラーが起きるまでに、どの関数がどの順番で呼ばれたかの記録です。

NullReferenceException: Object reference not set to an instance of an object
ExampleScript.MoveTarget () (at Assets/Scripts/ExampleScript.cs:22)
ExampleScript.Update () (at Assets/Scripts/ExampleScript.cs:15)

読み方:

  • 一番上が、エラーが実際に起きた場所(MoveTargetの22行目)
  • 下に行くほど、それを呼び出した元の関数(Updateの15行目から呼ばれた)
  • まずは一番上の、自分が書いたスクリプトの行を確認すればOK

よくあるエラーと対処法

NullReferenceException(Null参照エラー)

原因:中身が空(null)の変数を使おうとした。よくあるのは、Inspectorで設定し忘れているケースです

典型的なコード:

// エラーになる例
GameObject obj = null;
obj.transform.position = Vector3.zero; // objがnullなのでエラー

対処法:まずはInspectorで、スクリプトの欄が「None」になっていないか確認します。スクリプト側で守る場合は、次のように「空でなければ使う」と書きます(if文は第6章で説明します)。

// 空でないときだけ使う
if (obj != null)
{
    obj.transform.position = Vector3.zero;
}

MissingComponentException

原因:スクリプトが使おうとしたコンポーネントが、ゲームオブジェクトに付いていない

典型的なコード:

// Rigidbodyコンポーネントがないオブジェクトで使うとエラー
GetComponent<Rigidbody>().AddForce(Vector3.up);

対処法:

// コンポーネントの存在チェック
Rigidbody rb = GetComponent<Rigidbody>();
if (rb != null)
{
    rb.AddForce(Vector3.up);
}

IndexOutOfRangeException(配列の範囲外アクセス)

原因:配列の、存在しない番号にアクセスした

典型的なコード:

int[] numbers = new int[3]; // インデックス0,1,2のみ有効
numbers[5] = 10; // エラー!インデックス5は存在しない

対処法:

if (index >= 0 && index < numbers.Length)
{
    numbers[index] = 10;
}

Consoleウィンドウの便利な機能

メッセージのフィルター

Consoleウィンドウの右上にある3つのボタンで、メッセージの種類ごとに表示・非表示を切り替えられます:

  • 通常ログボタン:通常のメッセージの表示・非表示
  • 警告ボタン:警告の表示・非表示
  • エラーボタン:エラーの表示・非表示

ボタンの横の数字は、それぞれの件数です。エラーだけ見たいときは、ログと警告のボタンをOffにします。

エラーメッセージの詳細表示

エラーメッセージをダブルクリックすると、該当するスクリプトファイルが開き、エラーが発生した行にジャンプします。

ログのクリア

Consoleウィンドウの左上にある「Clear」ボタンで、すべてのログを消去できます。

Clearの右の▼からは、自動で消すタイミングを選べます:

  • Clear on Play:再生するたびに消す(初期設定でOn)
  • Clear on Build:ビルドするたびに消す
  • Clear on Recompile:スクリプトを保存して読み込み直すたびに消す

前回の再生のログが消えて困るときは、Clear on PlayをOffにしてみてください。

デバッグの基本的な流れ

ゲーム開発でのデバッグは、以下の流れで行うと効果的です:

  1. 問題の特定: 何がおかしいのかを明確にする
  2. ログの追加: 問題箇所にDebug.Log()を挿入
  3. 実行と確認: 再生モードで動作を確認
  4. エラーの分析: Consoleのメッセージを読み解く
  5. 修正: 問題を解決する
  6. ログの削除: 不要なデバッグコードを削除

注意点やヒント

デバッグはゲーム開発の半分以上を占める大切な作業です。最初はエラーがたくさん出て挫折しそうになりますが、一つずつ解決していくのが上達の近道。Debug.Logを上手に使って、プログラムの動きを「見える化」しましょう。ログが多すぎる場合は、条件分岐で必要なときだけ出力するようにすると便利ですよ!

スライム

よく使うスクリプトの場合など、bool型の変数を用意してからログを出すか出さないかフローを分けます。あとはインスペクターで必要に応じて設定することでデバッグが必要なときだけ出来ますよ

フェアリー

デバッグが終わったログは消すか、そのスイッチでOffにしておこうね。ログだらけだと本当に見たいエラーが埋もれちゃうよ

よくあるエラーと対処法(追加)

コンパイルエラー(スクリプトの文法エラー)

  • 症状:VS Codeでスクリプトに赤い波線が出る。再生しようとすると「All compiler errors have to be fixed before you can enter playmode!」と表示されて再生出来ない
  • 原因:セミコロン(;)の忘れ、カッコの閉じ忘れ、大文字・小文字の間違い
  • 対処法:エラーメッセージの「ファイル名(行,列)」の場所を確認する。メッセージをダブルクリックすると、その行が開きます

アセットが見つからないエラー

  • 症状:「The referenced script on this Behaviour is missing」と表示される。Inspectorに「Missing (Mono Script)」と出る
  • 原因:アタッチしていたスクリプトのファイルが削除された、またはファイル名とクラス名が違う
  • 対処法:そのコンポーネントを削除して、スクリプトを付け直す

まとめ

この記事では、Unityのデバッグの基本について学びました:

  • Consoleウィンドウ: ログ・警告・エラーを表示する重要なツール
  • Debug.Log(): スクリプトからメッセージを出力する関数
  • エラーの種類: 通常ログ/警告/エラーの色分けと意味
  • エラーの読み方: スタックトレースを活用した問題特定
  • よくあるエラー: NullReferenceExceptionなどの対処法

Consoleウィンドウを上手に活用することで、ゲーム開発がスムーズに進むようになります。最初は大変かもしれませんが、デバッグスキルは経験と共に必ず上達します。

次のステップ

デバッグの基本をマスターしたら、次は以下の記事がおすすめです:

次の第6章からは、いよいよスクリプトを書いていきます。この記事で覚えたConsoleの見方は、第6章でもずっと使います!

デバッグスキルを活かして、より良いゲーム開発を進めていきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次