68 lines
2.1 KiB
C#
68 lines
2.1 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.Log($"取出对象池,现在长度为:{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>(typeName);
|
|
GameObject obj = GameObject.Instantiate(go, parent);
|
|
poolDic[typeName].Enqueue(obj);
|
|
//this.Log($"取出对象池,现在长度为:{poolDic[typeName].Count}");
|
|
|
|
return poolDic[typeName].Dequeue();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 存入对象池
|
|
/// </summary>
|
|
/// <param name="typeName">存入类型</param>
|
|
/// <param name="obj">存入的物体</param>
|
|
public void PutInGame(string typeName, GameObject obj)
|
|
{
|
|
if (poolDic[typeName] != null)
|
|
{
|
|
poolDic[typeName].Enqueue(obj);
|
|
//this.Log($"放入对象池,现在长度为:{poolDic[typeName].Count}");
|
|
}
|
|
else
|
|
{
|
|
poolDic[typeName] = new Queue<GameObject>();
|
|
poolDic[typeName].Enqueue(obj);
|
|
}
|
|
}
|
|
}
|