1.對象池簡單定義
同學您好,對象池是一種Unity經常用到的內存管理服務,針對需要經常生成消失的對象,作用在于可以減少創建每個對象的系統開銷。我們在對象需要消失的時候不Destroy而是SetActive(false),然后放入池子中(Queue),當需要再次顯示一個新的對象的時候,先去池子中看有沒有隱藏的對象,有就取出SetActive(true),若池子里沒有可用的則再Instantiate。
2.使用對象池的原因
在Unity游戲開發的過程中經常會創建一些新的對象,如果數量較少還可以接受,如果創建的新對象數量龐大,那么對內存而言是一個極大的隱患。例如射擊游戲當中,每發射一顆子彈,都要創建一個新的子彈對象,那么子彈是數量龐大,可想而知一場游戲當中會創建多少這樣的新對象,那么如果這些子彈創建之后都對游戲起著關鍵且持續性的作用也無可厚非,問題是子彈發射完成之后,幾秒之后就不再擁有任何的意義,一般會將它自動的隱藏,也就是我們所說的SetActive(false),因此大量的非活躍對象出現在游戲場景當中。
由于對象池中的對象只是SetActive(false)了,并非真正銷毀了,所以一般運用于游戲中經常用到或需大量生成的物體。并不能將所有對象都用此技術,如若不然便是得不償失了。
3.創建并使用一個簡單對象池
首先我們先生成一個對象池的class,里面的內容就很簡單,首先有一個Queue用來存放池子中的對象,然后實現兩個方法,一個取對象,一個放對象。取對象的時候,若池子中有可用對象則取出一個,若沒有則Instantiate一個;放對象即將對象SetActive(false)并且放入池子中。