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

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

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

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

未設定のオブジェクトとは以下のような状態を指します。
【エラー】UnassignedReferenceExceptionの直し方_0
None と記載があれば、それは 未設定 ということ。

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

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

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

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

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

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

このようにコンポーネントに設定されるべきオブジェクトが未設定であり、
それを参照しようとした時に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でプログラミングしていきましょう。

エラー解決の速度は「準備」で決まる

エラーを直せたら、次は エラーを素早く見つけられる環境 を整えましょう。

オオバが執筆した 「SRDebuggerの教科書」 では、実機デバッグを劇的に効率化するSRDebuggerの導入から拡張まで体系的に解説しています。

実機での検証・デバッグの効率は開発スピードに直結します。ぜひ確認してみてください。

SRDebuggerの教科書
実機デバッグ効率を劇的に上げるSRDebuggerの導入から拡張まで解説する教科書です。
詳しくはこちら
SRDebuggerの教科書

記事の内容やUnityゲーム開発について、個別で相談したい 方は「オオバの公式LINE」からご連絡ください。

いまなら期間限定で、Unity開発を加速させる 無料特典 も配布中です! → 公式LINEに登録して特典を受け取る

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

オススメ記事
検証環境