Exemplo n.º 1
0
    public void GetEnityFromPoolAsync(string assetName, Action <GameObject> cb)
    {
        Queue <AssetPoolItem> pool = null;

        _entityPoolMap.TryGetValue(assetName, out pool);
        GameObject obj = null;

        if (pool != null && pool.Count > 0)
        {
            AssetPoolItem item = pool.Dequeue();
            obj = item.gameObject;
            obj.SetActive(true);
            cb(obj);
        }
        else
        {
            GetEntityPrefabAsync(assetName, (prefab) => {
                obj = GameObject.Instantiate <GameObject>(prefab);
                if (obj != null)
                {
                    AssetPoolItem item = obj.GetComponent <AssetPoolItem>();
                    if (item != null)
                    {
                        item.SetAssetName(assetName);
                    }
                    else
                    {
                        SampleDebuger.LogError("asset " + assetName + " is not a pool item");
                    }
                    cb(obj);
                }
            });
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// 将资源放回对象池
    /// </summary>
    /// <param name="item"></param>
    public void PutEnityToPool(AssetPoolItem item)
    {
        string assetName           = item.GetAssetName();
        Queue <AssetPoolItem> pool = null;

        _entityPoolMap.TryGetValue(assetName, out pool);
        if (pool == null)
        {
            pool = new Queue <AssetPoolItem>();
            _entityPoolMap[assetName] = pool;
        }
        pool.Enqueue(item);
    }