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); } }); } }
/// <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); }