public Poolable GetObject(Poolable prefab)
    {
        // So we know that the prefab being passed in is unique
        // use to create instances with same data
        if (prefab.poolableID == 0)
        {
            prefab.poolableID = prefab.GetInstanceID();
        }

        int instanceID = prefab.poolableID;

        if (pools.ContainsKey(instanceID))
        {
            return(pools[instanceID].GetObject());
        }

        // Used for parenting Objects
        Transform parentGroup = new GameObject(prefab.name + instanceID).transform;

        parentGroup.SetParent(transform);

        // Create the new object pool
        ObjectPool pool = new ObjectPool(prefab, parentGroup);

        pools.Add(instanceID, pool);
        Poolable obj = pool.GetObject();

        return(obj);
    }