Unity緩存池

unity在創建物體後(申請內存),刪除,內存中沒有立刻釋放,只是將引用取消掉.

緩存池:
優點:減少內存消耗,優化運行時效率,防止內存泄漏.
需要存放不同類型的遊戲對象(GameObject)

使用字典來創建緩存池Dictionary>

緩存池創建:
緩存池判斷遊戲物體是什麼類型使用枚舉

public enum gameObjType
{
Bullet0,
Bullet1,
}
緩存池只有一個,使用單例模式(靜態類還可以new,使用單例模式就不能new了)進行創建

//單例
private static GamePool instance;
public static GamePool Instance
{
get
{
return instance;
}
}
private void Awake()
{
if (instance == null)
{
instance = this;
}
}

static Dictionary> dic =
new Dictionary>();

1.判斷字典中是否有要創建的遊戲物體類型
2.有此類型,遍歷Value(List)中,有沒有可以使用的GameObject,有的話返回它,沒有的話,創建一個實例並在List中添加它,返回此實例.
3.沒有類型創建一個Key-Value對,新建一個List,新建一個目標類型遊戲物體的實例,將此實例加入List,將List加入字典,返回此實例

public GameObject CreateGameObj(gameObjType type)
{
Object go;//設爲成員變量
GameObject finalGo;
go = Resources.Load("Bullet" + (int)type);
if (dic.ContainsKey(type))//字典中存在type的情況
{
foreach (var item in dic[type])
{
if (item.activeSelf == false)
{
return item;
}
}
//遍歷List後沒有可以用的GameObject情況
finalGo = Instantiate(go) as GameObject;
dic[type].Add(finalGo);
return finalGo;
}
List temp = new List();
finalGo = Instantiate(go) as GameObject;
temp.Add(finalGo);
dic.Add(type, temp);
return finalGo;
}
更多unity2018的功能介紹請到paws3d爪爪學院查找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章