一如孝、對象池的概念
對象池背后的理念其實是非常簡單的。我們將對象存儲在一個池子中隧枫,當需要時在再次使用,而不是每次都實例化一個新的對象谓苟。池的最重要的特性官脓,也就是對象池設計模式的本質是允許我們獲取一個“新的”對象而不管它真的是一個新的對象還是循環(huán)使用的對象。這樣做的好處是優(yōu)化了在增刪對象時CPU的性能損耗涝焙,但是增加了內存對游戲對象的小部分存儲性能卑笨。
二、對象池的使用實例
1仑撞、打方塊游戲的運行效果介紹
打方塊游戲的對象池使用,通過創(chuàng)建一個對象池來儲存子彈赤兴,減少CPU對子彈預設體的增刪。
下面貼出游戲的運行界面:
子彈預設體的數(shù)量顯示:
子彈的預設體的數(shù)量如圖所示隧哮,根據(jù)子彈產生的速度桶良,只要子彈的對象池中有子彈游戲對象存在,已經創(chuàng)建的子彈都可以循環(huán)使用沮翔,當對象池中沒有子彈對象時陨帆,或者子彈對象都在使用中,則再創(chuàng)建一個新的子彈對象。
2疲牵、編寫子彈游戲對象池
分析子彈為游戲對象承二,為了方便存儲其他的游戲對象(如磚塊等),根據(jù)不同名字的游戲對象纲爸,我們將該集合對象池儲存為字典型亥鸠。相同名字的游戲對象儲存在動態(tài)數(shù)組中,則Dictionar<string, ArrayList>缩焦,并將該對象池腳本設置為單例腳本读虏。
貼出代碼部分:
??????? 層次視圖中創(chuàng)建一個空物體命名為GameController袁滥,再創(chuàng)建一個平面Plane盖桥,置為GameController的子物體。
工程視圖中創(chuàng)建如下圖所示题翻,material中是磚塊的材質球揩徊,Texture中是磚塊的貼圖
貼圖如下:
材質球設置如下,將tiling設置為0.5:
磚塊預設體設置如下:
子彈預設體設置如下:
Resources中有三個腳本嵌赠,如下:
Bullet腳本添加在子彈預設體上塑荒,GameController腳本添加在GameController上,ObjectPool為單例腳本不添加在任何游戲物體上姜挺。
Bullet腳本內容如下:
GameController腳本如下:
????????? 上文講解了ObjectPool的基本原理及其實現(xiàn)。下面推薦一個更加成熟的插件——PoolManager炊豪,該插件功能十分強大凌箕,所以才敢賣那么貴,30美刀...國內有位牛人已經寫了一份不錯的教程词渤,有興趣的童鞋可以參考下:Unity3D研究院之初探PoolManager插件牵舱。