using System.Collections.Generic;
using UnityEngine;
public class ObjectPool<T> where T : MonoBehaviour, IPoolable
{
private readonly List<T> pool = new();
private readonly Transform parent;
private readonly T prefab;
public ObjectPool(T prefab)
{
this.prefab = prefab;
parent = new GameObject($"{typeof(T).Name}_Pool").transform;
}
public T Get()
{
T obj;
if (pool.Count > 0)
{
int lastIndex = pool.Count - 1;
obj = pool[lastIndex];
pool.RemoveAt(lastIndex);
}
else
{
var go = Object.Instantiate(prefab, parent);
obj = go.GetComponent<T>();
}
obj.OnAcquireFromPool();
return obj;
}
public void Return(T obj)
{
obj.OnReturnToPool();
pool.Add(obj);
}
}
public interface IPoolable
{
void OnAcquireFromPool();
void OnReturnToPool();
}
코드블럭 어떻게 삽입하는지 몰라서...
웬만하면 재발명 하지 말고 있는거 쓰는건 어떰
그냥 유니티 공식 오브젝트 풀링 써