我有一個游戲物件串列,這可以跟蹤我在游戲中擁有的怪物。當怪物被殺死時,它將在串列的位置 0。我想銷毀場景中的物件并將其從串列中洗掉。
我的問題是,命令是否:list.RemoveAt(0); 呼叫物件被銷毀還是讓它作為某種記憶體泄漏而存在?
我試過移除怪物,摧毀然后移除,將怪物保存到 var 然后移除然后銷毀,所有這些都會導致錯誤。如果我知道該命令的作業原理,我可以將問題縮小到代碼中的那個或其他內容。
uj5u.com熱心網友回復:
如果您將串列設為公共變數,您可以在 Unity 檢查器中看到它。當您摧毀怪物時,您會看到串列更改為將怪物設定為空。我會在摧毀之前從串列中洗掉怪物。您可以在怪物上呼叫 OnDestroy 方法以在怪物被摧毀之前將其從串列中洗掉。這使用串列的 Remove 函式而不是 RemoveAt。
uj5u.com熱心網友回復:
不,從串列中洗掉它不會破壞它。List.Remove() 不會破壞 GameObjects - 它只是您的個人串列。您需要呼叫 GameObject.Destroy(list[index]); 然后你可以 list.RemoveAt(index); 將其從您的串列中洗掉。但是,如果我們討論的是一個不是 GameObjects 的串列并且它是您自己的普通 Class(),那么您無需擔心記憶體分配,因為有一個稱為垃圾收集的東西,.NET 將在其中釋放物件的記憶體一旦沒有人再有對該物件的活動參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477584.html
上一篇:面試官:為什么資料庫連接池不采用 IO 多路復用?我懵逼了。。
下一篇:敵人機器人遠離玩家Unity3D