using System.Collections.Generic; using System.ComponentModel; using UnityEngine; using UnityEngine.Pool; public class GameObjectPool { private ObjectPool Pool; public GameObjectPool(GameObject prefab, int defaultSize = 10, int maxSize = 50) { var container = new GameObject(prefab.name + " Pool"); Pool = new ObjectPool( createFunc: () => { var obj = Object.Instantiate(prefab, container.transform); obj.SetActive(false); return obj; }, actionOnGet: obj => { obj.SetActive(true); }, actionOnRelease: obj => { obj.SetActive(false); }, actionOnDestroy: obj => Object.Destroy(obj), collectionCheck: true, defaultCapacity: defaultSize, maxSize: maxSize ); } public GameObject Get(Vector3 position, Quaternion rotation) { var obj = Pool.Get(); obj.transform.SetPositionAndRotation(position, rotation); return obj; } public void Release(GameObject obj) => Pool.Release(obj); }