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