Unity Object Pool

时间:2021-12-21 23:25:40
using System.Collections;
using System.Collections.Generic;
using UnityEngine; [System.Serializable]
public class ObjectPoolItem
{
public GameObject objectToPool; public int amountToPool; public bool shouldExpand = true;
} public class ObjectPooler : MonoBehaviour
{
public static ObjectPooler SharedInstance; public List<GameObject> pooledObjects; public List<ObjectPoolItem> itemToPool; void Awake()
{
SharedInstance = this;
} private void Start()
{
pooledObjects = new List<GameObject>();
foreach(ObjectPoolItem item in itemToPool)
{
for (int i = ; i < item.amountToPool; i++)
{
GameObject obj = (GameObject)Instantiate(item.objectToPool);
obj.SetActive(false);
pooledObjects.Add(obj);
}
} } public GameObject GetPooledObject(string tag)
{
for (int i = ; i < pooledObjects.Count; i++)
{
if (!pooledObjects[i].activeInHierarchy && pooledObjects[i].tag == tag)
{
return pooledObjects[i];
}
}
foreach (ObjectPoolItem item in itemToPool)
{
if (item.objectToPool.tag == tag)
{
if (item.shouldExpand)
{
GameObject obj = (GameObject)Instantiate(item.objectToPool);
obj.SetActive(false);
pooledObjects.Add(obj);
return obj;
}
}
}
return null;
} }