Unity いきなりのNullReferenceExceptionの対処法
Unityでテストプレイをするために再生ボタンを押した時、今まで動いてたのにいきなり
NullReferenceException: Object reference not set to an instance of an object
というエラーを出されたことはないでしょうか?
そしていつの間にか元通り動くようになったりしたことはないでしょうか?
自分も何回かこの現象に出会っているのですが対処法が一つ見つかったので一応メモ。
そのシーンで扱っているスクリプトの中に
GameObject BasicObj = Resources.Load ("Prefab/BASIC_PREFAB") as GameObject;
Instantiate(BasicObj);
とか
instPrefabObj = GameObject.Find ("BASIC_PREFAB(Clone)");
とか
instPrefabObj.GetComponent
みたいなのがあったら要注意。
BASIC_PREFABの内容を編集しようとUnity上でこのプレハブを選択したままテストプレイをすると、
instPrefabObj.GetComponentで冒頭のエラーが出てきます。
このエラーは本来instPrefabObjに何も入って無い時やGetComponentの中のスクリプトがそのオブジェクトに存在しない時とかに出てくるエラーなのですが、
プレハブを選択したままの場合だとDebug.Log(instPrefabObj)を見てもしっかり取得できているし、
ヒエラルキーに生成されたBASIC_PREFAB(Clone)を見てもしっかりMyclassスクリプトが入っています。
エラーが出てくる以上はスクリプトに異常があるように感じてしまいますが、前まで普通に動いてたのであればそのスクリプトは正しいはずです。
しかしなぜだか使われるプレハブを選択したままテストプレイするとこのエラーが出るのです・・・
とりあえず対処法は何も選択してない状態(Inspectorに何も表示されてない)でテストプレイをすればいいだけです。