こんにちは!Unityエディタに表示されるエラーログ、使いこなしていますか?
エラーログにはエラーの原因や解決のヒントになるエラーメッセージが含まれています。
本記事ではそのエラーログの見方・エラーメッセージ一覧、さらにデバッグ作業に役立つおすすめアセットなども紹介していきます!
エラーログの見方
エラーログとは、スクリプトにエラーがあった場合にコンソールに表示される以下のような表示のことです。

エラーログにはエラーの種類やエラーが起きた場所などの情報が書かれており、エラーの原因を特定するのに役立ちます。
エラーアイコンの意味
エラーログに表示されるエラーアイコンには白、黄色、赤色の3種類があります。

エラーアイコンの色によってエラーの種類は以下のように見分けることができます。
- 白色:エラーではない、Debug.Logで表示される通常のメッセージ。
- 黄色:警告メッセージ。できれば直した方がいいが、プログラムは実行できることが多い。
- 赤色:エラーメッセージ。直さないといけないエラー。
エラーログからエラーが起きた場所が分かる
エラーが起きた場所を特定するには、エラーログをダブルクリックしましょう。

するとスクリプト内のエラーがあった箇所まで飛ばされるので、エラーメッセージと照らし合わせて修正しましょう。
エラーメッセージはエラーログ内の「:」の後の部分に書かれています。

この場合はスクリプトの該当箇所に「;」が必要だと言われています。
スクリプトのエラーがあった箇所と照らし合わせると、文末にセミコロンをつけ忘れていたことによるエラーであった事が分かります。

エラーの種類によってはスクリプトに飛べない場合もあります。
そんな場合は次のエラーメッセージの検索を試してみましょう。
エラーメッセージをコピーして検索してみる
エラーメッセージの内容がよく分からない場合はコピペしてGoogle検索してみるのが有効です。
エラーログを選択した状態で「Ctrl + C」ボタン、Macの場合は「command + C」でコピーしできるので検索してみましょう。

検索する時は赤字の部分の「エラーコード」またはオレンジ色の部分の「エラーの内容」で検索するとヒットしやすいです。
ありがたいことにたいていのエラーはすぐに解決方法が出てきます。

以上がエラーログの基本的な使い方です。
よく出るエラーメッセージ一覧と解決方法
エラーメッセージを毎回検索するのも手間なので、よく起きるエラーは覚えてしまうと良いです。
ここではよく起きる代表的なエラーメッセージを紹介しておきます。
error CS0246: The type or namespace name ‘〇〇’ Could not be found.

このエラーは使用しようとしているネームスペースが存在しない場合に起きるエラーです。
以下のようにスクリプトの最初でusing〜と記述しているかと思いますが、
ここで必要な宣言が抜けていたりスペルミスしているとこのエラーが起きます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;例えばスクリプトからUIを取得しようとしているのにusing UnityEngine.UI;の記述がないとエラーになってしまいます。
ネームスペースの記述漏れ、記述ミスがないか確認してみましょう。
All compiler errors have to be fixed before you can enter playmode!

エラーが起きている状態で実行ボタンを押すとこのように表示されプログラムを実行することができません。
具体的なエラーログが別に表示されているはずですので、まずそちらを修正してからプログラムを実行するようにしましょう。
NullReferenceException: Object reference not set to an instance of an object

これは参照しているオブジェクトが見つからない場合に出るエラーです。
解決するには参照先のオブジェクトの初期化や取得を正しく行う必要があります。
例えば以下のような例ではこのエラーが出ます。
Rigidbody rb;
void Start()
{
rb.AddForce(8, 0, 0);
}この場合は以下のようにGetComponent を使って、参照したいRigidbodyのコンポーネントを取得すると解決します。
Rigidbody rb;
void Start()
{
rb = gameObject.GetComponent<Rigidbody>();
rb.AddForce(8, 0, 0);
}エラーログをダブルクリックする事で原因となった箇所に飛ぶことができるので、そこからどのオブジェクトの参照が原因か特定し初期化や取得を行う記述を追加しましょう。
error CS1061: ‘〇〇’ does not contain a definition 〜

こちらのエラーは存在しないメソッドを呼び出そうとした時に起こります。
この場合は「AddForce」のつづりが「addForce」になっていたためにこのエラーが起きました。
メソッド名が正しく入力されているか確認してみましょう。
MissingComponentException:

こちらはコンポーネントが存在しないことを示すエラーです。
例えば、スクリプトからRigidbodyコンポーネントにアクセスしようとしているのに、
オブジェクトにRigidbodyコンポーネントが付いていないとこのエラーが起きます。
エラーメッセージ内に何のコンポーネントが必要か書かれているはずですので、それを追加するようにしましょう。
デバッグに役立つおすすめUnityアセット
Unityアセットストアでは、エラーの原因特定や解決に役立つアセットが提供されています。
その中でも特におすすめのアセットを5つに厳選して紹介します!
In-game Debug Console

エラーメッセージを視覚的に見やすくしてくれる無料アセットです。
エラーログを検索できるサーチバーも追加してくれます。
Editor Console Pro

Unityのコンソールをデバッグしやすいように様々な機能を追加してくれるアセットです。
検索バー・独自のアイコン・ログの色分け・無視するログの設定・スタックトレースのエクスポートなどコンソールの使い勝手を格段に上げてくれるアセットです。
SRDebugger – Console & Tools On-Device


SRDebuggerはデバイスでのプレイ中にバグの発見を手助けしてくれるアセットです。
ランタイムコンソール機能、バグレポーター機能、見やすいプロファイラー機能などの便利な機能が追加されます。
パフォーマンスを重視して作られており、最小限の負荷でゲームに搭載することができます。
Project Verification

プロジェクト内のエラーを自動的に特定し、問題の修正を提示してくれるアセットです。
自動的にチェックしてもらう項目は、ニーズに合わせて簡単に設定することができます。
エラーの原因特定、解決をより効率的に行えるようになるアセットです。
Debugging Essentials

デバッグに役立つ5つのツールが含まれたアセットです。
そのうちの一つとしてランタイムのヒエラルキーウインドウが追加され、オブジェクトの検索・追加・無効化などが簡単にできるようになります。
他にもインスペクターやコンソールにデバッグ作業に必要な多くの機能を追加してくれ、デバッグ時間を大幅に節約してくれるアセットです。
まとめ
以上、Unityのエラーログの使い方とエラーメッセージ一覧、おすすめのデバッグ用アセットを紹介してきました。
本記事で紹介したエラーメッセージはごく一部で、それ以外にも多くのエラーが出てきます。
アセットを使うとエラーの原因特定・解決に非常に役立つのでぜひ導入を検討してみてください!

コメント