首先,我問題發生的原因很白癡,
但是這個問題困擾了我一整個下午,所以記載於此。
場景架構大概長這樣,
綠色物件會呼叫紅色物件上的程式碼,
而紅色的程式碼會對參數的玩家資料做處理。
遊戲時,我得到了缺少玩家資料的空引用訊息,
但我怎麼看 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) 上多掛的腳本移除,
並且將正確的物件重新放置在參數欄位上,問題解決。