public class PoolMgr
{
private static PoolMgr instance;
public static PoolMgr Instance
{
get
{
if (instance==null)
{
instance = new PoolMgr();
}
return instance;
}
}
private Dictionary<string, Queue<GameObject>> pools = new Dictionary<string, Queue<GameObject>>();
private Transform poolObj;
public void Push(GameObject obj)
{
obj.name = obj.name.Replace("(Clone)",string.Empty);
if (!pools.ContainsKey(obj.name))
{
pools.Add(obj.name,new Queue<GameObject>());
}
if (!poolObj)
{
poolObj = new GameObject("Pools").transform;
}
Transform objParent = poolObj.Find(obj.name);
if (!objParent)
{
objParent = new GameObject(obj.name).transform;
objParent.SetParent(poolObj);
}
obj.transform.SetParent(objParent);
pools[obj.name].Enqueue(obj);
obj.SetActive(false);
}
public GameObject GetObj(GameObject obj)
{
if (!pools.ContainsKey(obj.name) || (pools.ContainsKey(obj.name)&& pools[obj.name].Count == 0))
{
GameObject temp = GameObject.Instantiate(obj);
Push(temp);
}
GameObject result = pools[obj.name].Dequeue();
result.SetActive(true);
return result;
}
}