如果您不是Unity編輯器Plugin的開發者, 請忽略這個訊息
這個錯誤不會對您的遊戲程式造成傷害或負擔
同時可以跳過本文, 不用繼續閱讀
如果你的Unity開始不斷發出這樣的哀嚎, 且您是編輯器Plugin開發者
那麼您就會需要閱讀本文
0. 這個Bug是我造成的嗎?
這個訊息完整版本應該會類似這樣
Cleaning up leaked objects in scene since no game object, component or manager is referencing them XXXXXX has been leaked N times.
其中請看看XXXXXX的名稱是否是您所開發的類別
如果不是, 問題應該就不在您身上, 請找XXXXXX類別的開發者處理
如果他不知道怎樣處理, 請他來閱讀本文
N是代表他的Code一共犯了幾次這樣的錯誤
1. 這個Bug好像是我造成的, 但理由到底是什麼?
理由簡短的解釋就是:
你在某個地方create了ScriptableObject的物件
但你沒有正確處理他, 接著Unity幫你進行了自動處理, 並且善意的印出訊息
告訴你你的程式有這樣的問題, 雖然無傷大雅, 但他還是會持續告訴你
2. 能簡單告訴我怎樣重現這樣的Bug嗎?
現在假設你有一個繼承自ScriptableObject, AAA
接著在編輯器程式中, 找個會被執行到的地方寫下類似這樣的code
ScriptableObject.CreateInstance<AAA>();
請仔細檢查您所開發的XXXXXX類別內容
應該可以找到類似的程式碼
接下來去編譯編輯器code, 這個bug應該就會出現了
3. 所以我應該怎樣修正這個問題?
把ScriptableObject.CreateInstance<AAA>();產生的物件接起來
AAA so ScriptableObject.CreateInstance<AAA>();
用完後
Object.DestroyImmediate(so);
這樣就可以修好了
補充:
因為這是編輯器內部的一個比較奇怪不算錯誤的錯誤
所以在修正code後, 請重新啟動Unity, 否則先前的訊息應該還是會持續刷出來
本文參考了這篇文章的第二段說明
Finding the cause
這段文章裏頭找到的解決方法
沒有留言:
張貼留言