報錯內容:

代碼內容:

報錯,預製體ball不出來。這咋辦呀!


對代碼背後的執行結果太信任了,沒有判空,以至於下一句代碼直接對null執行了,就導致了異常。

解決方法就是改變編程思維,「防禦性編程」,不相信所有代碼的執行結果都符合預期,對於載入、查找等代碼充分考慮失敗情況,

思維改過來就完事了


Update裏也有類似的情況,以及那個Destroy,不覺得哪裡不對勁嗎


Scene場景裏 fireposition 你 拼錯了。


逆推查錯,你這是丟失對象。就是那個fire對象沒有。那為什麼會沒有呢,你是通過find查找名字的,,那為什麼找不到,順明要不是你把場景的對象在某個地方刪除了,要不就是名字打錯了,然後你一看,名字打錯了


本來想嘲諷你幾句的,想了想算了。都是新手過來的。你的fireposition在場景中和代碼中拼寫不一致。

希望你下次遇到報空的,首先檢查拼寫錯誤


小球產生位置的名字寫錯了……只要是報錯展示沒有找到實力對象,一般就是名字拼寫錯了,或者載入路徑填錯了。都是字元串的鍋。

過來人提醒你一下~把小球產生位置做成你發射子彈物體的子物體一起打預製體,如果代碼掛發射物體,就用transform.Find(),商業遊戲裏如果不是做Demo用GameObject.Find是要被抓去浸豬籠的~寧可拖~你要是拖了,你也就不用在這問這個問題了~


最煩的就是新手問這種問題,你有這個問問題的時間,把unity裏的名字直接複製到代碼裏很難嗎?


還是認為方法論很重要. 可以試試try{}catch(你的報錯類型){ 打個return;然後貼上斷點 } 運行看看是怎麼回事,然後去反推哪些操作會導致這麼腦殘的結果...

不過就空引用而言是你的代碼防禦性太低了.(然後仔細一看是名字打錯了就更離譜了) 不過一定要注意:不要信任Unity的底層實現! 做好try catch的報錯系統, Unity有時會相同的代碼執行出不同的效果就很離譜.


別這樣,如果在業務哲學上不能為null,你就不能容錯處理,反而是堅決不容錯處理,該報錯就得報錯,否則你業務邏輯一旦複雜出了你就知道痛了。


推薦閱讀:
相關文章