2025-10-20 19:20:36 +08:00

63 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXKFramework;
public class GameObject_Pool : MonoSingleton<GameObject_Pool>
{
Dictionary<string, Queue<GameObject>> poolDic = new Dictionary<string, Queue<GameObject>>();
// Start is called before the first frame update
/// <summary>
/// 取出游戏物体
/// </summary>
/// <param name="typeName">取出的类型</param>
/// <param name="parent">取出来以后放到哪个父物体下</param>
/// <returns></returns>
public GameObject TakeOutGame(string typeName, Transform parent)
{
if (poolDic.ContainsKey(typeName) && poolDic[typeName].Count > 0 && poolDic[typeName] != null)
{
GameObject go = poolDic[typeName].Dequeue();
go.transform.SetParent(parent);
this.Error($"取出对象池,现在长度为:{poolDic[typeName].Count}");
return go;
}
else
{
if (!poolDic.ContainsKey(typeName))
{
poolDic.Add(typeName, new Queue<GameObject>());
}
if (poolDic[typeName] == null)
{
poolDic[typeName] = new Queue<GameObject>();
}
if (poolDic[typeName].Count == 0)
{
GameObject go = Resources.Load<GameObject>("souSuoBtn");
GameObject obj = GameObject.Instantiate(go, parent);
poolDic[typeName].Enqueue(obj);
this.Error($"取出对象池,现在长度为:{poolDic[typeName].Count}");
return poolDic[typeName].Dequeue();
}
return null;
}
}
public void PutInGame(string typeName, GameObject obj)
{
if (poolDic[typeName] != null)
{
poolDic[typeName].Enqueue(obj);
this.Error($"放入对象池,现在长度为:{poolDic[typeName].Count}");
}
else
{
poolDic[typeName] = new Queue<GameObject>();
poolDic[typeName].Enqueue(obj);
}
}
}