using UnityEngine; using WK; namespace WK { public class GameObjectPool : System.IDisposable, UnityObjectPool.IPooledInstanceInitializer { UnityObjectPool _pool; Transform _poolParent; public GameObjectPool(GameObject sourceObject, Transform poolParent, int initialSize = 0) { _pool = new UnityObjectPool(sourceObject, poolParent, this, initialSize); _poolParent = poolParent; } public GameObject Acquire(Transform parent) { GameObject instance = _pool.Acquire(); instance.transform.SetParent(parent); instance.transform.ResetLocal(); instance.SetActive(true); return instance; } public void Release(GameObject instance) { instance.SetActive(false); instance.transform.SetParent(_poolParent); _pool.Release(instance); } public void InitPooledInstance(GameObject instance) { instance.SetActive(false); } public void DestroyPooledInstance(GameObject instance) { UnityEngine.Object.Destroy(instance); } public void Dispose() { _pool.Dispose(); _pool = null; _poolParent = null; } } }