using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class PoolData
{
public GameObject poolParent;
public List<GameObject> poolList;
public PoolData(GameObject parent, GameObject obj)
{
poolParent = new GameObject(obj.name);
poolParent.transform.parent = parent.transform;
poolList = new List<GameObject>() { };
PushObj(obj);
}
public void PushObj(GameObject obj)
{
obj.SetActive(false);
obj.transform.parent = poolParent.transform;
poolList.Add(obj);
}
public GameObject GetObj()
{
GameObject obj = null;
obj = poolList[0];
poolList.RemoveAt(0);
obj.SetActive(true);
obj.transform.parent = null;
return obj;
}
}
public class PoolMgr : BaseMgr<PoolMgr>
{
GameObject poolObj;
Dictionary<string, PoolData> poolDic = new Dictionary<string, PoolData>();
public void PushObj(string name, GameObject obj)
{
if (poolObj == null)
poolObj = new GameObject("Pool");
//里面有抽屉
if (poolDic.ContainsKey(name))
{
poolDic[name].PushObj(obj);
}
//里面没有抽屉
else
{
poolDic.Add(name, new PoolData(poolObj,obj ));
}
}
public GameObject GetObj(string name )
{
GameObject obj = null;
if (poolDic.ContainsKey(name) && poolDic[name].poolList.Count>0)
{
obj = poolDic[name].GetObj();
}
else
{
obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
}
obj.name = name;
return obj;
}
public void Clear()
{
poolDic.Clear();
poolObj = null;
}
}
unity - 缓存池
最新推荐文章于 2024-09-01 22:33:42 发布