切換
舊版
前往
大廳
主題

(Unity) 排除:Inspector 有指定物件,卻得到 NullReferenceException 訊息的問題

浪濤書記 | 2020-06-03 00:50:06 | 巴幣 1002 | 人氣 351


首先,我問題發生的原因很白癡,
但是這個問題困擾了我一整個下午,所以記載於此。

場景架構大概長這樣,
綠色物件會呼叫紅色物件上的程式碼,
而紅色的程式碼會對參數的玩家資料做處理。

遊戲時,我得到了缺少玩家資料的空引用訊息,
但我怎麼看 Inspector 的介面都有指定資料,
試過了重開 Unity、重新開機都沒有解決,
在網路上翻找別人有沒有碰上類似的狀況,
資訊極少,類似的狀況也都是他們自己的問題,與 Unity無關,

.........
.........
.........

最後發現我也是自己的問題,
在 Update() 加上測試代碼,
發現玩家資料同時存在「有」跟「沒有」的狀態:

void Update () {

    if (Input.GetKeyDown(KeyCode.S)) {
         if (playerData == null) {
            Debug.LogWarning("缺少玩家資料");
         } else {
            Debug.Log("有玩家資料");
         }
    }

}


給測試代碼加上 this.name 的訊息,
Debug.Log("有少玩家資料 " + this.name);
Debug.Log("缺少玩家資料 " + this.name);

果然打印出的物件名稱有兩個,
缺少空引用的原因是我在實際場景的眾多物件中,
在某個其他物件上也掛載了相同的腳本,
並且參數欄位是指向它,而不是我所希望的紅色物件,
好死不死這個多掛的腳本沒有放參數,所以跳出了空引用訊息;

將上圖 GameObject(7) 上多掛的腳本移除,
並且將正確的物件重新放置在參數欄位上,問題解決。
送禮物贊助創作者 !
0
留言

創作回應

更多創作