目次
はじめに
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を追加
- Unityエディタのヒエラルキーウィンドウを右クリック
- 「Create Empty」を選択
- 作成された空のGameObjectに名前を「GameDirector」と設定
ステップ2:スクリプトをアタッチ
- 「GameDirector」オブジェクトを選択
- InspectorウィンドウからGameDitector.csスクリプトをアタッチ
これで、GameObject.Find("GameDirector")
が正しくオブジェクトを見つけられるようになり、
エラーが解消されました。
関連する補足事項
GameObject.Find()
は、正確な名前の一致が必要です(スペルミスや余計なスペースがあると見つかりません)- ヒエラルキー上のオブジェクト名が
"GameDirector"
である必要があります。たとえば"GameDitector"
になっていると一致しません - スクリプト
GameDitector.cs
は、publicクラス名とファイル名が一致している必要があります
まとめ
今回のエラーは、GameObject.Find()
でオブジェクトが見つからず、nullのままGetComponent()を実行したために発生していました。
以下のチェックポイントを確認することで、同様のエラーは防げます:
- 該当するオブジェクトがヒエラルキーに存在しているか?
- オブジェクト名に誤字はないか?
- スクリプトはアタッチされているか?
同じようなエラーで困っている方の参考になれば幸いです。