CutePet/Assets/Scripts/Framework/Pool/PoolMgr.cs

350 lines
9.7 KiB
C#
Raw Permalink Normal View History

2024-10-25 11:10:04 +08:00
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class PoolData
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>еĶ<D0B5><C4B6><EFBFBD> <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʹ<EFBFBD>õĶ<C3B5><C4B6><EFBFBD>
private Stack<GameObject> dataStack = new Stack<GameObject>();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ʹ<C2BC><CAB9><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD>
private List<GameObject> usedList = new List<GameObject>();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ڵĶ<DAB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
private int maxNum;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
private GameObject rootObj;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ж<EFBFBD><D0B6><EFBFBD>
public int Count => dataStack.Count;
public int UsedCount => usedList.Count;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>бȽ<D0B1> С<>ڷ<EFBFBD><DAB7><EFBFBD>true <20><>Ҫʵ<D2AA><CAB5><EFBFBD><EFBFBD>
/// </summary>
public bool NeedCreate => usedList.Count < maxNum;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECBAAF>
/// </summary>
/// <param name="root"><3E><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="name"><3E><><EFBFBD><EFBFBD><EBB8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public PoolData(GameObject root, string name, GameObject usedObj)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ <20>Żᶯ̬<E1B6AF><CCAC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ
if(PoolMgr.isOpenLayout)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB8B8><EFBFBD><EFBFBD>
rootObj = new GameObject(name);
//<2F>͹<EFBFBD><CDB9>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ
rootObj.transform.SetParent(root.transform);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ <20>ⲿ<EFBFBD>϶<EFBFBD><CFB6>ǻᶯ̬<E1B6AF><CCAC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC> ʹ<><CAB9><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PushUsedList(usedObj);
PoolObj poolObj = usedObj.GetComponent<PoolObj>();
if (poolObj == null)
{
Debug.LogError("<22><>Ϊʹ<CEAA>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ع<EFBFBD><D8B9>ܵ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PoolObj<62>ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return;
}
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
maxNum = poolObj.maxNum;
}
/// <summary>
/// <20>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
/// </summary>
/// <returns><3E><>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public GameObject Pop()
{
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameObject obj;
if (Count > 0)
{
//<2F><>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ʹ<EFBFBD><CAB9>
obj = dataStack.Pop();
//<2F><><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9><EFBFBD><EFBFBD> Ӧ<><D3A6>Ҫ<EFBFBD><D2AA>ʹ<EFBFBD><CAB9><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
usedList.Add(obj);
}
else
{
//ȡ0<C8A1><30><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
obj = usedList[0];
//<2F><><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ŵĶ<C5B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
usedList.RemoveAt(0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ó<EFBFBD>ȥ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD>ּ<EFBFBD>¼<EFBFBD><C2BC> ʹ<><CAB9><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>β<EFBFBD><CEB2> <20><>ʾ <20>Ƚ<EFBFBD><C8BD>µĿ<C2B5>ʼ
usedList.Add(obj);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
obj.SetActive(true);
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ
if (PoolMgr.isOpenLayout)
obj.transform.SetParent(null);
return obj;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="obj"></param>
public void Push(GameObject obj)
{
//ʧ<><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
obj.SetActive(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ
if (PoolMgr.isOpenLayout)
obj.transform.SetParent(rootObj.transform);
//ͨ<><CDA8>ջ<EFBFBD><D5BB>¼<EFBFBD><C2BC>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dataStack.Push(obj);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD> Ӧ<>ð<EFBFBD><C3B0><EFBFBD><EFBFBD>Ӽ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
usedList.Remove(obj);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ʹ<EBB5BD><CAB9><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>¼
/// </summary>
/// <param name="obj"></param>
public void PushUsedList(GameObject obj)
{
usedList.Add(obj);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ䵱<D6B5><E4B5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>滻ԭ<E6BBBB><D4AD> <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public abstract class PoolObjectBase { }
/// <summary>
/// <20><><EFBFBD>ڴ洢 <20><><EFBFBD>ݽṹ<DDBD><E1B9B9> <20><> <20>߼<EFBFBD><DFBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>mono<6E>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T"></typeparam>
public class PoolObject<T> : PoolObjectBase where T:class
{
public Queue<T> poolObjs = new Queue<T>();
}
/// <summary>
/// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><><EFBFBD>ݽṹ<DDBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>̳иýӿ<C3BD>
/// </summary>
public interface IPoolObject
{
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵķ<DDB5><C4B7><EFBFBD>
/// </summary>
void ResetInfo();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class PoolMgr : BaseManager<PoolMgr>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ֵ <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private Dictionary<string, PoolData> poolDic = new Dictionary<string, PoolData>();
/// <summary>
/// <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>ݽṹ<DDBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӵ<EFBFBD><D3B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Dictionary<string, PoolObjectBase> poolObjectDic = new Dictionary<string, PoolObjectBase>();
//<2F><><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD>
private GameObject poolObj;
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>
public static bool isOpenLayout = true;
private PoolMgr() {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA> <20>ʹ<EFBFBD><CDB4><EFBFBD>
if (poolObj == null && isOpenLayout)
poolObj = new GameObject("Pool");
}
/// <summary>
/// <20>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
/// </summary>
/// <param name="name"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns><3E>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD></returns>
public GameObject GetObj(string name)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA> <20>ʹ<EFBFBD><CDB4><EFBFBD>
if (poolObj == null && isOpenLayout)
poolObj = new GameObject("Pool");
GameObject obj;
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD>ж<EFBFBD>
if(!poolDic.ContainsKey(name) ||
(poolDic[name].Count == 0 && poolDic[name].NeedCreate))
{
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//û<>е<EFBFBD>ʱ<EFBFBD><CAB1> ͨ<><CDA8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> ȥʵ<C8A5><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GameObject
obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> Ĭ<>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>(Clone)
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
obj.name = name;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(!poolDic.ContainsKey(name))
poolDic.Add(name, new PoolData(poolObj, name, obj));
else//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>¼<EFBFBD><C2BC>ʹ<EFBFBD><CAB9><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
poolDic[name].PushUsedList(obj);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD> <20><><EFBFBD><EFBFBD> ʹ<><CAB9><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֱ<><D6B1>ȥȡ<C8A5><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
{
obj = poolDic[name].Pop();
}
#endregion
#region û<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
////<2F>г<EFBFBD><D0B3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ж<EFBFBD><D0B6><EFBFBD> <20><>ȥֱ<C8A5><D6B1><EFBFBD><EFBFBD>
//if (poolDic.ContainsKey(name) && poolDic[name].Count > 0)
//{
// //<2F><><EFBFBD><EFBFBD>ջ<EFBFBD>еĶ<D0B5><C4B6><EFBFBD> ֱ<>ӷ<EFBFBD><D3B7>ظ<EFBFBD><D8B8>ⲿʹ<E2B2BF><CAB9>
// obj = poolDic[name].Pop();
//}
////<2F><><EFBFBD>򣬾<EFBFBD>Ӧ<EFBFBD><D3A6>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
//else
//{
// //û<>е<EFBFBD>ʱ<EFBFBD><CAB1> ͨ<><CDA8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> ȥʵ<C8A5><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GameObject
// obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
// //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> Ĭ<>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>(Clone)
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// obj.name = name;
//}
#endregion
return obj;
}
/// <summary>
/// <20><>ȡ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>Mono<6E>ģ<EFBFBD>
/// </summary>
/// <typeparam name="T"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></typeparam>
/// <returns></returns>
public T GetObj<T>(string nameSpace = "") where T:class,IPoolObject,new()
{
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string poolName = nameSpace + "_" + typeof(T).Name;
//<2F>г<EFBFBD><D0B3><EFBFBD>
if(poolObjectDic.ContainsKey(poolName))
{
PoolObject<T> pool = poolObjectDic[poolName] as PoolObject<T>;
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>п<EFBFBD><D0BF>Ը<EFBFBD><D4B8>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
if(pool.poolObjs.Count > 0)
{
//<2F>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>и<EFBFBD><D0B8><EFBFBD>
T obj = pool.poolObjs.Dequeue() as T;
return obj;
}
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ǿյ<C7BF>
else
{
//<2F><><EFBFBD>뱣֤<EBB1A3><D6A4><EFBFBD><EFBFBD><EFBFBD>޲ι<DEB2><CEB9><EFBFBD><ECBAAF>
T obj = new T();
return obj;
}
}
else//û<>г<EFBFBD><D0B3><EFBFBD>
{
T obj = new T();
return obj;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="name"><3E><><EFBFBD><EFBFBD><EBA3A8><EFBFBD>󣩵<EFBFBD><F3A3A9B5><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="obj">ϣ<><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD></param>
public void PushObj(GameObject obj)
{
#region <EFBFBD><EFBFBD>Ϊʧ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////<2F><>֮<EFBFBD><D6AE>Ŀ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>Ҫ<EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>õ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD>
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>԰Ѷ<D4B0><D1B6><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ļ<EFBFBD><EFBFBD><E2BFB4><EFBFBD><EFBFBD><EFBFBD>ĵط<C4B5>
//obj.SetActive(false);
////<2F><>ʧ<EFBFBD><CAA7><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//obj.transform.SetParent(poolObj.transform);
#endregion
//û<>г<EFBFBD><D0B3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if (!poolDic.ContainsKey(obj.name))
// poolDic.Add(obj.name, new PoolData(poolObj, obj.name));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>зŶ<D0B7><C5B6><EFBFBD>
poolDic[obj.name].Push(obj);
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֱ<>ӷ<EFBFBD>
//if(poolDic.ContainsKey(name))
//{
// //<2F><>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// poolDic[name].Push(obj);
//}
////<2F><><EFBFBD><EFBFBD> <20><>Ҫ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD>
//else
//{
// //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// poolDic.Add(name, new Stack<GameObject>());
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// poolDic[name].Push(obj);
//}
}
/// <summary>
/// <20><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T"><3E><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD></typeparam>
public void PushObj<T>(T obj, string nameSpace = "") where T:class,IPoolObject
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫѹ<D2AA><D1B9>null<6C><6C><EFBFBD><EFBFBD> <20>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (obj == null)
return;
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string poolName = nameSpace + "_" + typeof(T).Name;
//<2F>г<EFBFBD><D0B3><EFBFBD>
PoolObject<T> pool;
if (poolObjectDic.ContainsKey(poolName))
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pool = poolObjectDic[poolName] as PoolObject<T>;
else//û<>г<EFBFBD><D0B3><EFBFBD>
{
pool = new PoolObject<T>();
poolObjectDic.Add(poolName, pool);
}
//<2F>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ <20><><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
obj.ResetInfo();
pool.poolObjs.Enqueue(obj);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
/// ʹ<>ó<EFBFBD><C3B3><EFBFBD> <20><>Ҫ<EFBFBD><D2AA> <20>г<EFBFBD><D0B3><EFBFBD>ʱ
/// </summary>
public void ClearPool()
{
poolDic.Clear();
poolObj = null;
poolObjectDic.Clear();
}
}