こんにちは、Unityエンジニアのオオバです。
Unity開発で一度は目にするエラー、
「 UnassignedReferenceException 」の直し方を紹介します。
UnassignedReferenceExceptionの原因は未設定オブジェクトへのアクセス
UnassignedReferenceExceptionの発生原因は、
未設定のオブジェクトへのアクセス です。
未設定のオブジェクトとは以下のような状態を指します。
None と記載があれば、それは 未設定 ということ。
このオブジェクトにアクセスすることで、 UnassignedReferenceExceptionが発生します。
これから具体的な直し方、対策を解説します。
根本の原因が分かれば怖いエラーではありません。
本記事を最後まで読んで、UnassignedReferenceExceptionを撲滅しましょう。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
UnassignedReferenceExceptionとはオブジェクトの設定ミス
UnassignedReferenceExceptionとは 「未設定オブジェクトの参照エラー」 です。
エラー文を分解すると理解しやすいです。
- Unassigned : 未設定の
- Reference : (オブジェクトへの)参照
- Exception : 例外(エラー)
このようにコンポーネントに設定されるべきオブジェクトが未設定であり、
それを参照しようとした時にUnassignedReferenceException
は起きます。
つまり、未設定オブジェクト自体は問題ありません。
未設定のオブジェクトにアクセスすることでエラーが発生する のです。
// 未設定オブジェクト
public GameObject myObject;
void Start()
{
// 未設定オブジェクトにアクセスしていない
}
// 未設定オブジェクト
public GameObject myObject;
void Start()
{
// 未設定オブジェクトにアクセス
// UnassignedReferenceException発生
myObject.SetActive(true);
}
ソースコードで確認すると理解が進みますね。
オブジェクトが未設定だからエラーが起きるのではなく、
未設定オブジェクトにアクセスしているからエラーが起きる ということを覚えておきましょう。
Unityのオブジェクトには コンポーネントも含まれます。
コンポーネントとは 「機能」 のこと。 自作のコンポーネントを作るためにはMonoBehaviourが必要 です。
MonoBehaviourの参照エラーでUnassignedReferenceExceptionもよく起きます。
そんなMonoBehaviourの理解を深める記事を執筆しました。
MonoBehaviourの理解に不安な方はぜひ読んでみてください。
具体的なUnassignedReferenceExceptionの直し方
では具体的なUnassignedReferenceExceptionの直し方を解説します。
原因は 「未設定のオブジェクトへのアクセス」 でした。
つまり UnassignedReferenceExceptionは未設定を解消すれば直る ということです。
上の動画のように未設定オブジェクトをなくすだけです。
これで直りました。
つまり、 オブジェクトを設定する ことで、UnassignedReferenceExceptionは直るのです。
今回登場した 「コンポーネント」の理解はUnity開発で必須 です。
もしコンポーネントがよくわからないという方はこちらの記事がおすすめ。
UnassignedReferenceExceptionの原因を簡単に探る方法
ここで簡単にUnassignedReferenceExceptionの原因を特定する方法を紹介します。
登場するのは Consoleウィンドウ です。
ConsoleウィンドウにUnassignedReferenceExceptionが表示されていますよね。
この UnassignedReferenceExceptionの行ををクリック してみましょう。
すると エラーの起きたGameObjectが光ります。
このように、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の直し方や原因特定方法について解説してきました。
簡単に記事の内容をまとめます。
①未設定の変数自体がエラーではない
②未設定の変数にアクセスするとエラー
③未設定の変数をなくせば直る
④Consoleウィンドウのエラー行をクリックすると直す場所が分かる
⑤UnassignedReferenceExceptionのパターンを理解して原因を特定する
こんな感じです。
もうUnassignedReferenceExceptionは怖くないのではないでしょうか。
エラーが起きたとしても特定できますし、
直し方も理解できましたね。
しかしUnity初心者にとってエラーは怖いもの。
動かなくなるだけでパニックになりますよね。
どんなエラーでも共通の共通の直し方があります。
落ち着いて エラーの文章コピペでググる。
これが最強です。
今の時代、世界の誰かが同じエラーを解決しています。
プログラミングは失敗の数だけ成長します。
エラーにおびえず、思い切ってUnityでプログラミングしていきましょう。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいUnityライフをお過ごしください。
- Unity2020.3.26f1