Unity3D Destroy方法的細節


當我們想銷毀一個集合中的所有物體時

很容易想到會這么做

List<GameObject> goes = new List<GameObject>(); 
        for (int i = 0; i < goes.Count; i++)
        {
            Destroy(goes[i]);
        }

用一個for循環

遍歷到所有的物體

然后將每個物體 i 銷毀

 

然而,再仔細想一下

當把第0個物體銷毀了

那原來的第1個物體,不就是第0個物體了嗎

按這個邏輯

不應該是Destroy(goes[0])嗎

 

對的,這個邏輯沒錯

問題就出在Destroy這個api身上

Destroy會在當前幀結束的時候再把物體銷毀

也就是說

當把第0個物體銷毀時,當前幀此物體還在

想銷毀下一個物體,自然是銷毀物體1,而不是物體0

 

所以,在銷毀前想要處理一些邏輯時

就需要注意到這一點

 

當然,也有辦法可以將物體立馬銷毀,而不是在當前幀結束時銷毀

DestroyImmediate

這個api可以執行立刻銷毀的操作

也就是說,如果用這個api寫文章最開始的邏輯,那么就是

List<GameObject> goes = new List<GameObject>(); 
        for (int i = 0; i < goes.Count; i++)
        {
            DestroyImmediate(goes[0]);
        }

沒錯,這里的參數就是0了

 

當然,Destroy也有延遲銷毀的函數重載

Destroy(gameObject, 5);

這個API就是在5秒后再銷毀gameObject


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM