public void AddToPool(UniPooledObject obj)
    {
        obj.gameObject.SetActive(false);
        obj.transform.SetParent(transform);

        m_availabilityElements.Add(obj);
    }
    public UniPooledObject GetPooledObjectInstance()
    {
        UniPooledObject ret = null;

        if (m_availabilityElements.Count > 0)
        {
            ret = m_availabilityElements[0];
            m_availabilityElements.Remove(ret);
        }
        else
        {
            var obj = Instantiate(m_prefab);
            ret      = obj.GetComponent <UniPooledObject>();
            ret.Pool = this;
        }

        ret.gameObject.SetActive(true);

        return(ret);
    }
    void InitPool()
    {
        UniLog.CCAssert(m_availabilityElements.Count == 0, "Can not initialized pool, because this pool is not empty");

        UniLog.CCAssert(m_prefab != null, "Found error when initialize pool, case by prefab is null");

        if (m_availabilityElements == null)
        {
            m_availabilityElements = new List <UniPooledObject>();
        }

        for (int i = 0; i < m_minCapacity; i++)
        {
            var obj = Instantiate(m_prefab, transform);
            obj.SetActive(false);

            UniPooledObject t = null;
            if (t = obj.GetComponent <UniPooledObject>())
            {
                t.Pool = this;
                m_availabilityElements.Add(t);
            }
        }
    }