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