Example

using ObjectPools;

public sealed class TestObjectPool : Component
{
	[Property] private GameObject prefab { get; set; }

	private ObjectPool<GameObject> _pool;

	protected override void OnStart()
	{
		_pool = new ObjectPool<GameObject>(
			OnCreate, 
			OnGet, 
			OnRelease, 
			OnDestroy, 
			defaultCapacity: 10, 
			maxAmount: 10000, 
			collectionCheck: true);
	}

	GameObject OnCreate()
	{
		return prefab.Clone();
	}

	void OnGet(GameObject obj)
	{
		obj.Enabled = true;
	}

	void OnRelease(GameObject obj)
	{
		obj.Enabled = false;
	}

	void OnDestroy(GameObject obj)
	{
		obj.Destroy();
	}
}