Unity: “NullReferenceException: Object reference not set to an instance of an object”的可能解決方法

昨晚才成功的解決大量敵人的生成問題開心的趣睡覺後 一早起來卻又遇到”NullReferenceException: Object reference not set to an instance of an object”這個非人類語言所能理解的錯誤訊息 每次一遇到莫名奇妙的bug時 身體不由得會開始不舒服的開始冒汗 嚴重時胃部會開始抽痛 然後bug的難度(所需解決的時間) 會與負面情緒呈正比成長 有時還會出現乾脆放棄的黑暗想法

不過 由於好奇心與不服輸的心態 還是驅使我繼續前進… 說了廢話一堆 以下為可能的解決方式

照例 會先去Google一下 果不其然 有一堆人有此問題 但並沒有一個剛好是類似我的狀況 不過我還是歸納了一下 大家可能狀況的關鍵字:

  • null
  • GetComponent()
  • Clone
  • Awake(), Start(), Update()

其中最引起我注意的是Awake(), Start(), Update() 這位網友所提供(Click me)的 本以為應該就是這個了 但還是沒那麼幸運 決定用老方法: 先出去運動

…2小時後

在運動時不斷反覆思考以上幾個關鍵字 後來想到可能的問題出在哪

回到家 載入舊專案版本(舊版是沒有”NullReferenceException: Object reference not set to an instance of an object”此問題的)與新專案版本比對後 發覺最大的差異在此:

舊版

新版(將所有場景物件整理到一個空物件Level1底下 並產生成Prefab)

也就是說 新版是Prefab 舊版不是

人就是你殺的!!

所以將新版的層級關係恢復成舊版的樣子後就可解決此問題了!

據說 Unity在產生重複物件時 雖然表面上名字一樣 但實際上物件名稱後面會多了個”Clone”的字樣 (不知是否有點像是以前公司的程式人員告訴我說使用Phyre Station (for PS3) 開發遊戲時 在有些物件名稱後面要加上 -node的原因類似?)

不過 我並不能完全確定是Clone造成這樣的問題 我想Script應該有比我更正確的寫法來解決此問題

解決 bug後又是一陣神清氣爽 充滿希望啦!!