继承单例的对象池
对象池可以减少频繁开辟空间
提前创建一些实例,放到字典里缓存.需要的时候就取出来.避免频繁的销毁创建
public class OjbPool : Single<OjbPool>
{
/// <summary>
/// 对象池(字典)
/// </summary>
private Dictionary<string, Stack<GameObject>> poolDic = new Dictionary<string, Stack<GameObject>>();
//获得一个GameObject
public GameObject GetObj(string name)
{
GameObject obj;
//查看字典有没有实例,并且实例的数量不为0.然后取出 激活
if (poolDic.ContainsKey(name) && poolDic[name].Count > 0)
{
obj = poolDic[name].Pop();
obj.SetActive(true);
}
else
{
//如果对象池里没有这个东西,就实例化一个
obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
obj.name = name;
}
return obj;
}
//把对象压入栈
public void PushObj(GameObject obj)
{
obj.SetActive(false);
if (!poolDic.ContainsKey(obj.name)) //查看对象池有没有这个key
poolDic.Add(obj.name, new Stack<GameObject>());
poolDic[obj.name].Push(obj);
}
//清空
public void ClearPool()
{
poolDic.Clear();
}
}