125 lines
2.7 KiB
C#
125 lines
2.7 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
public class poolData
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĸ<D8B5><C4B8>ڵ<EFBFBD>
|
|||
|
public GameObject fatherObj;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
public List<GameObject> poolList;
|
|||
|
|
|||
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
public poolData(GameObject obj,GameObject poolObj)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACB2>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>pool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fatherObj = new GameObject(obj.name);
|
|||
|
fatherObj.transform.parent = poolObj.transform;
|
|||
|
|
|||
|
poolList = new List<GameObject>() { obj };
|
|||
|
PushObj(obj);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="obj"></param>
|
|||
|
public void PushObj(GameObject obj)
|
|||
|
{
|
|||
|
//ʧ<><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
obj.SetActive(false);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
poolList.Add(obj);
|
|||
|
//<2F><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
obj.transform.parent = fatherObj.transform;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public GameObject GetObj()
|
|||
|
{
|
|||
|
GameObject obj = null;
|
|||
|
//ȡ<><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
obj = poolList[0];
|
|||
|
poolList.RemoveAt(0);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
obj.SetActive(true);
|
|||
|
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
obj.transform.parent = null;
|
|||
|
return obj;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//Dictionary List <20>ֵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
//GameObject<63><74>Resources<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API
|
|||
|
public class PoolMgr :BaseManager<PoolMgr>
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
public Dictionary<string,poolData> poolDic = new Dictionary<string, poolData>();
|
|||
|
|
|||
|
private GameObject poolObj;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="name"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public GameObject GetObj(string name)
|
|||
|
{
|
|||
|
GameObject obj = null;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(poolDic.ContainsKey(name) && poolDic[name].poolList.Count > 0)
|
|||
|
{
|
|||
|
obj = poolDic[name].GetObj();
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
|
|||
|
//<2F>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָĵúͳ<C3BA><CDB3>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
obj.name = name;
|
|||
|
}
|
|||
|
|
|||
|
return obj;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>ȥ
|
|||
|
/// </summary>
|
|||
|
public void PushObj(string name, GameObject obj)
|
|||
|
{
|
|||
|
if (poolObj == null)
|
|||
|
{
|
|||
|
poolObj = new GameObject("Pool");
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (poolDic.ContainsKey(name))
|
|||
|
{
|
|||
|
poolDic[name].PushObj(obj);
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><>һ<EFBFBD><D2BB>listֱ<74>ӼӸ<D3BC><D3B8><EFBFBD>Ʒ<EFBFBD><C6B7>ȥ
|
|||
|
poolDic.Add(name, new poolData(obj,poolObj));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>л<EFBFBD>ʱ
|
|||
|
/// </summary>
|
|||
|
public void Clear()
|
|||
|
{
|
|||
|
poolDic.Clear();
|
|||
|
poolObj = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|