【Unity】NullReferenceExceptionの原因と対処法|GameObject.Findで見つからないときの対処例

目次

はじめに

Unityでスクリプトを書いていると、よく出てくるエラーのひとつがこちらです:

NullReferenceException: Object reference not set to an instance of an object
ItemController.Start() (at Assets/ItemController.cs:17)

私も実際にこのエラーに遭遇し、調査した結果を共有します。


エラーの内容と原因

今回エラーが出ていた該当のコードは以下の部分です:

myScript = GameObject.Find("GameDirector").GetComponent<GameDitector>();

このエラーは、GameObject.Find("GameDirector")が null を返していることが原因です。
つまり、シーン内に 「GameDirector」という名前のオブジェクトが存在していないにもかかわらず、
それを探そうとしたために NullReferenceException が発生していました。


解決方法:ヒエラルキーにGameDirectorオブジェクトを追加する

ステップ1:GameObjectを追加

  1. Unityエディタのヒエラルキーウィンドウを右クリック
  2. Create Empty」を選択
  3. 作成された空のGameObjectに名前を「GameDirector」と設定

ステップ2:スクリプトをアタッチ

  1. 「GameDirector」オブジェクトを選択
  2. InspectorウィンドウからGameDitector.csスクリプトをアタッチ

これで、GameObject.Find("GameDirector") が正しくオブジェクトを見つけられるようになり、
エラーが解消されました。


関連する補足事項

  • GameObject.Find()は、正確な名前の一致が必要です(スペルミスや余計なスペースがあると見つかりません)
  • ヒエラルキー上のオブジェクト名が "GameDirector" である必要があります。たとえば "GameDitector" になっていると一致しません
  • スクリプト GameDitector.cs は、publicクラス名とファイル名が一致している必要があります

まとめ

今回のエラーは、GameObject.Find()でオブジェクトが見つからず、nullのままGetComponent()を実行したために発生していました。

以下のチェックポイントを確認することで、同様のエラーは防げます:

  • 該当するオブジェクトがヒエラルキーに存在しているか?
  • オブジェクト名に誤字はないか?
  • スクリプトはアタッチされているか?

同じようなエラーで困っている方の参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次