namespace ObjectPool { public class GameObjectPool { public GameObjectPool.InitCallbackDelegate initCallback; private Dictionary<string, Queue<GameObject>> _pool; private Transform _manager; public GameObjectPool(Transform manager) { this._manager = manager; this._pool = new Dictionary<string, Queue<GameObject>>(); } public void Clear() { foreach (KeyValuePair<string, Queue<GameObject>> keyValuePair in this._pool) { foreach (GameObject go in keyValuePair.Value) GameObject.Destroy(go); } this._pool.Clear(); } public int count { get { return this._pool.Count; } } public GameObject GetObject(string url) { url = UIPackage.NormalizeURL(url); if (url == null) return (GameObject)null; Queue<GameObject> GameObjectQueue; if (this._pool.TryGetValue(url, out GameObjectQueue) && GameObjectQueue.Count > 0) return GameObjectQueue.Dequeue(); //TODO FIX:修改为获取对象的渠道 GameObject objectFromUrl = null; if (objectFromUrl != null && this.initCallback != null) this.initCallback(objectFromUrl); return objectFromUrl; } public void ReturnObject(GameObject obj) { //TODO FIX:修改为obj的Instanceid; string resourceUrl = obj.GetInstanceID().ToString(); Queue<GameObject> GameObjectQueue; if (!this._pool.TryGetValue(resourceUrl, out GameObjectQueue)) { GameObjectQueue = new Queue<GameObject>(); this._pool.Add(resourceUrl, GameObjectQueue); } ToolSet.SetParent(obj.transform, this._manager); GameObjectQueue.Enqueue(obj); } public delegate void InitCallbackDelegate(GameObject obj); } }