练习项目时候时常用到,贴在这里一下方便用到时候复制粘贴
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ObjectPool
{
static ObjectPool instance;
public static ObjectPool Instance
{
get
{
if (instance == null) instance = new ObjectPool();
return instance;
}
}
Dictionary<string, Queue<GameObject>> pool = new Dictionary<string, Queue<GameObject>>();
public void AddPool(GameObject g, int initCount)
{
pool.Add(g.name, new Queue<GameObject>());
for (int i = 0; i < initCount; i++)
{
GameObject newGameObject = GameObject.Instantiate(g);
newGameObject.name = g.name;
pool[g.name].Enqueue(newGameObject);
}
}
public GameObject GetObject(GameObject g, bool active = true)
{
if (!pool.ContainsKey(g.name))
{
pool.Add(g.name, new Queue<GameObject>());
}
if (pool[g.name].Count == 0)
{
GameObject newGameObject = GameObject.Instantiate(g);
newGameObject.name = g.name;
return newGameObject;
}
GameObject nextGameObject = pool[g.name].Dequeue();
nextGameObject.SetActive(active);
return nextGameObject;
}
public void PutObject(GameObject g)
{
if (!pool.ContainsKey(g.name))
{
pool.Add(g.name, new Queue<GameObject>());
}
g.SetActive(false);
if (!pool[g.name].Contains(g)) pool[g.name].Enqueue(g);
}
}
用时只需要调用GetObject获取对象和PutObject回收对象即可
|