using UnityEngine; public class BasePool : MonoBehaviour where T : PoolingObject { [field: SerializeField] public int Capacity { get; private set; } [SerializeField] private T prefab; private ObjectPool pool; private void Awake() { pool = new ObjectPool(CreateAction, GetAction, ReturnAction, Capacity); } protected virtual T CreateAction() { T instance = Instantiate(prefab); instance.gameObject.SetActive(false); instance.transform.SetParent(gameObject.transform, false); instance.OwningPool = this; return instance; } protected virtual void GetAction(T instance) { instance.gameObject.SetActive(true); } protected virtual void ReturnAction(T instance) { instance.gameObject.SetActive(false); } public T GetFromPool() { return pool.Get(); } public void ReturnToPool(T instance) { pool.ReturnToPool(instance); } }