125 lines
2.7 KiB
C#
Raw Normal View History

2025-04-18 21:05:56 +08:00
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;
}
}