渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

【エラー】UnassignedReferenceExceptionの直し方

【エラー】UnassignedReferenceExceptionの直し方

こんにちは、Unityエンジニアのオオバです。

Unity開発で一度は目にするエラー、
UnassignedReferenceException 」の直し方を紹介します。

UnassignedReferenceExceptionの原因は未設定オブジェクトへのアクセス

UnassignedReferenceExceptionの発生原因は、
未設定のオブジェクトへのアクセス です。

未設定のオブジェクトとは以下のような状態を指します。

【エラー】UnassignedReferenceExceptionの直し方_0

None と記載があれば、それは 未設定 ということ。

このオブジェクトにアクセスすることで、 UnassignedReferenceExceptionが発生します。

これから具体的な直し方、対策を解説します。
根本の原因が分かれば怖いエラーではありません。

本記事を最後まで読んで、UnassignedReferenceExceptionを撲滅しましょう。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

UnassignedReferenceExceptionとはオブジェクトの設定ミス

UnassignedReferenceExceptionとは 「未設定オブジェクトの参照エラー」 です。

エラー文を分解すると理解しやすいです。

  • Unassigned : 未設定の
  • Reference : (オブジェクトへの)参照
  • Exception : 例外(エラー)

このようにコンポーネントに設定されるべきオブジェクトが未設定であり、
それを参照しようとした時にUnassignedReferenceExceptionは起きます。

つまり、未設定オブジェクト自体は問題ありません。
未設定のオブジェクトにアクセスすることでエラーが発生する のです。

UnassignedReferenceExceptionは起きない例
// 未設定オブジェクト  
public GameObject myObject;  

void Start()  
{
    // 未設定オブジェクトにアクセスしていない  
}
UnassignedReferenceExceptionが起きる例
// 未設定オブジェクト  
public GameObject myObject;  

void Start()  
{
    // 未設定オブジェクトにアクセス  
    // UnassignedReferenceException発生  
    myObject.SetActive(true);  
}

ソースコードで確認すると理解が進みますね。
オブジェクトが未設定だからエラーが起きるのではなく、
未設定オブジェクトにアクセスしているからエラーが起きる ということを覚えておきましょう。


Unityのオブジェクトには コンポーネントも含まれます。
コンポーネントとは 「機能」 のこと。 自作のコンポーネントを作るためにはMonoBehaviourが必要 です。
MonoBehaviourの参照エラーでUnassignedReferenceExceptionもよく起きます。

そんなMonoBehaviourの理解を深める記事を執筆しました。
MonoBehaviourの理解に不安な方はぜひ読んでみてください。

具体的なUnassignedReferenceExceptionの直し方

では具体的なUnassignedReferenceExceptionの直し方を解説します。
原因は 「未設定のオブジェクトへのアクセス」 でした。
つまり UnassignedReferenceExceptionは未設定を解消すれば直る ということです。

【エラー】UnassignedReferenceExceptionの直し方_1

上の動画のように未設定オブジェクトをなくすだけです。
これで直りました。

つまり、 オブジェクトを設定する ことで、UnassignedReferenceExceptionは直るのです。


今回登場した 「コンポーネント」の理解はUnity開発で必須 です。
もしコンポーネントがよくわからないという方はこちらの記事がおすすめ。

UnassignedReferenceExceptionの原因を簡単に探る方法

ここで簡単にUnassignedReferenceExceptionの原因を特定する方法を紹介します。
登場するのは Consoleウィンドウ です。

ConsoleウィンドウにUnassignedReferenceExceptionが表示されていますよね。

【エラー】UnassignedReferenceExceptionの直し方_2

この UnassignedReferenceExceptionの行ををクリック してみましょう。

すると エラーの起きたGameObjectが光ります。

【エラー】UnassignedReferenceExceptionの直し方_3

このように、Consoleウィンドウをクリックすることで、
Hierarchyウィンドウ、またはProjectウィンドウ内のオブジェクトが光るのです。

どこでエラーが起きているのか一撃で分かるため、非常に便利。
ぜひ覚えておきましょう。

Hierarchyウィンドウ、Consoleウィンドウ、Projectウィンドウの理解は Unity開発では必須 です。
初心者が覚えておくべきUnityのウィンドウを11個厳選 しました。
ぜひ読んでみてください。

UnassignedReferenceExceptionの対策「テンプレート」の理解

オブジェクトの設定ミスはどうしても起きてしまいます。
だって、人間だもの。

しかし、起きたエラーに対して迅速に対応することは可能です。
そこで、UnassignedReferenceExceptionのテンプレートを覚えましょう。

UnassignedReferenceExceptionは次のテンプレートで表示されます。

UnassignedReferenceException: The variable 【未設定変数名】 of  
【コンポーネント名】 has not been assigned.  
You probably need to assign the 【未設定変数名】 variable of  
the 【コンポーネント名】 script in the inspector.  
  • 【コンポーネント名】 : エラーの起きたコンポーネント名
  • 【未設定変数名】 : 未設定の変数名

UnassignedReferenceExceptionがConsoleウィンドウに表示された時は
👆のテンプレートを参考に原因を特定してみてください。

エラー UnassignedReferenceExceptionの直し方まとめ

本記事ではUnassignedReferenceExceptionの直し方や原因特定方法について解説してきました。
簡単に記事の内容をまとめます。

UnassignedReferenceExceptionの直し方まとめ

①未設定の変数自体がエラーではない

②未設定の変数にアクセスするとエラー

③未設定の変数をなくせば直る

④Consoleウィンドウのエラー行をクリックすると直す場所が分かる

⑤UnassignedReferenceExceptionのパターンを理解して原因を特定する

こんな感じです。

もうUnassignedReferenceExceptionは怖くないのではないでしょうか。
エラーが起きたとしても特定できますし、
直し方も理解できましたね。

しかしUnity初心者にとってエラーは怖いもの。
動かなくなるだけでパニックになりますよね。

どんなエラーでも共通の共通の直し方があります。

落ち着いて エラーの文章コピペでググる。
これが最強です。

今の時代、世界の誰かが同じエラーを解決しています。

プログラミングは失敗の数だけ成長します。
エラーにおびえず、思い切ってUnityでプログラミングしていきましょう。

「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!

最後まで読んでいただきありがとうございました!
すばらしいUnityライフをお過ごしください。

オススメ記事
検証環境
  • Unity2020.3.26f1