◀ 13.

エラー一覧

▶
この記事の要点
  • Unity のエラーはまず Console ウィンドウ(Window → General → Console、Ctrl+Shift+C)で全文とスタックトレースを読む
  • エラーは「コンパイルエラー(CS で始まる番号)」「実行時の例外(〜Exception)」「エディタ・物理エンジンの警告」に大別できる
  • コンパイルエラーが 1 つでも残っていると Play モードに入れない。上から順に直す
  • 実行時エラーの大半は NullReferenceException。Inspector での参照の割り当て漏れが典型
  • Console に出ない情報は Editor.log / Player.log に残る
  • 個別のエラーは子ページで原因と対処を解説

Unity のエラーに関する記事の入口ページです。主にスクリプト(C#)まわりのエラーを扱います。個別のエラーメッセージの解説は子ページから選んでください。このページでは、どのエラーにも共通する「読み方」「分類」「切り分け方」をまとめます。

Unity のエラーが出たときの調べ方

Unity のエラーは Console ウィンドウに出力されます。まず Console を開いてエラー文を確認し、メッセージで子ページや Unity 公式ドキュメントを検索するのが基本の流れです。

  1. Window → General → Console でコンソールを開く(ショートカットは Ctrl+Shift+C、Mac は Cmd+Shift+C)
  2. 赤いアイコンがエラー、黄色が警告、白が通常ログ。右上のボタンで種類ごとに表示を絞り込める
  3. エラー行をクリックすると下段にスタックトレースが出る。自分のスクリプト名と行番号が書かれた行を探す
  4. エラー行をダブルクリックすると、原因となったスクリプトの該当行がエディタで開く
  5. エラーメッセージの英文部分(変数名やオブジェクト名を除いた部分)で検索する
  6. コンパイル時に出るのか、Play 中だけ出るのか、特定の操作をしたときだけ出るのかを切り分ける

Console の便利な設定

  • Clear on Play: Play 開始ごとにログを消す。前回のエラーと混ざらない
  • Collapse: 同じメッセージをまとめて件数表示。毎フレーム出るエラーが見やすくなる
  • Error Pause: Debug.LogError や例外が出た瞬間に Play を一時停止。その時点の Hierarchy や Inspector を調べられる

エラーの種類でおおまかに分類する

種類見分け方特徴
コンパイルエラーerror CS0246 のように「CS + 番号」が付くスクリプトの構文・型の誤り。直すまで Play できない
実行時エラー(例外)NullReferenceException など「〜Exception」で終わるPlay 中に発生。その行以降の処理がそのフレームで止まる
物理エンジン関連の警告Collider / Rigidbody の名前が含まれるコンポーネントの組み合わせや設定値が原因(MeshCollider の警告など)
スクリプト連携・エディタ「script」「Behaviour」「missing」などを含むイベント関数の引数不一致、スクリプトファイルの欠落、クラス名とファイル名の不一致など

よく見るエラーと最初に疑う点

メッセージ(抜粋)最初に疑う点
NullReferenceException: Object reference not set to an instance of an objectInspector で変数にオブジェクトを割り当てていない、GetComponent / GameObject.Find が null を返している
UnassignedReferenceExceptionpublic / [SerializeField] の変数が Inspector で未設定(None のまま)
MissingReferenceException参照先の GameObject がすでに Destroy されているのに使っている
IndexOutOfRangeException / ArgumentOutOfRangeException配列・List の要素数を超えた添字。Inspector で Size を設定し忘れていないか
error CS0246: The type or namespace name '...' could not be foundusing の書き忘れ、パッケージ未インストール、クラス名のタイプミス
error CS1061: '...' does not contain a definition for '...'メソッド名・プロパティ名の誤り(大文字・小文字も区別される)、古い API の使用
All compiler errors have to be fixed before you can enter playmode!どこかにコンパイルエラーが残っている。Console をエラーだけに絞って確認
The referenced script on this Behaviour is missing!アタッチしていたスクリプトファイルが削除・改名された。Inspector で Missing になったコンポーネントを付け直す
スクリプトをアタッチできない(クラスが見つからない旨のダイアログ)ファイル名と MonoBehaviour を継承したクラス名が一致していない、またはコンパイルエラーが残っている

共通する基本の対処

  • エラーが出ている GameObject を Hierarchy で選択し、Inspector で変数の割り当てやコンポーネントの有無を確認する
  • 該当スクリプトの Awake / Start / Update のどこで起きているかを切り分ける。Awake と Start の実行順に依存した初期化は null の原因になりやすい
  • Debug.Log で変数の中身を出力し、「どこまでは正しいか」を確かめる。第 2 引数に GameObject を渡すと、ログをクリックしたときにそのオブジェクトがハイライトされる
  • Unity のバージョンを確認する。古い記事の API はすでに非推奨・削除されていることがある
  • コンパイルエラーは一番上のものから直す。1 つの誤りが後続の大量のエラーを生むことが多い

Console に出ない情報を確認する方法(ログファイル)

エディタが固まった、ビルドしたゲームだけで落ちる、といった場合はログファイルを見ます。

  • Editor.log(エディタのログ): Windows は %LOCALAPPDATA%\Unity\Editor\Editor.log、macOS は ~/Library/Logs/Unity/Editor.log。Console 右上のメニューの「Open Editor Log」からも開ける
  • Player.log(ビルドしたゲームのログ): Windows は %USERPROFILE%\AppData\LocalLow\会社名\製品名\Player.log。会社名と製品名は Player Settings の値

関連

Post Share
子ページ
  1. Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported in Unity 5.
  2. Script error: OnCollisionEnter
同階層のページ
  1. Unityの導入方法
  2. エディタ(画面)の説明
  3. プロジェクトの作成と削除
  4. オブジェクト
  5. コンポーネント
  6. スクリプト
  7. アセットのインポート方法
  8. ゲームの実行/一時停止/コマ送り
  9. パッケージのインポート
  10. ゲームの公開(Build)方法
  11. 重力の変更
  12. 用語集
  13. エラー一覧
  14. おすすめアセット一覧