using System.Collections; using System.Collections.Generic; using UnityEngine; public class LineObjectPool : MonoBehaviour { public static LineObjectPool Instance; private void Awake() { Instance = this; } #region 池对象操作 //-------预制体------- /// /// 线缆预UI制体 /// public GameObject line_item_prefab; /// /// 线缆组UI预制体 /// public GameObject line_group_item_prefab; //-------池对象------- /// /// 线缆池对象 /// public Queue line_item_pool = new Queue(); /// /// 线缆组池对象 /// public Queue line_group_item_pool = new Queue(); //-------池操作------- /// /// 从池中取出 /// /// /// /// public T GetItemFromPool() { object resoult = null; switch (typeof(T).Name) { case "LineItem": //线缆 if (line_item_pool.Count > 0) { var item = line_item_pool.Dequeue(); item.gameObject.SetActive(true); resoult = item; } else { var temp = Instantiate(line_item_prefab); resoult = temp.GetComponent(); } break; case "LineGroupItem": //线缆组 if (line_group_item_pool.Count > 0) { var item = line_group_item_pool.Dequeue(); item.gameObject.SetActive(true); resoult = item; } else { var temp = Instantiate(line_group_item_prefab); resoult = temp.GetComponent(); } break; default: break; } return (T)resoult; } /// /// 回收至池中 /// /// /// public void PushItemToPool(T item) { switch (item) { case LineItem: LineItem line_temp = item as LineItem; line_temp.transform.SetParent(null); line_temp.gameObject.SetActive(false); line_temp.Clear(); line_item_pool.Enqueue(line_temp); break; case LineGroupItem: LineGroupItem line_group_temp = item as LineGroupItem; line_group_temp.transform.SetParent(null); line_group_temp.gameObject.SetActive(false); line_group_temp.Clear(); line_group_item_pool.Enqueue(line_group_temp); break; default: break; } } #endregion #region #endregion #region 弃用 /// /// 从池中拿线item /// /// private LineItem GetLineItemFromPool() { if (line_item_pool.Count > 0) { var item = line_item_pool.Dequeue(); item.gameObject.SetActive(true); Debug.Log("从线池取出" + line_item_pool.Count); return item; } else { var temp = Instantiate(line_item_prefab); Debug.Log("空线池,新增一个"); return temp.GetComponent(); } } /// /// 往池中放线item /// private void PushLineItemToPool(LineItem item) { item.transform.SetParent(null); item.gameObject.SetActive(false); item.Clear(); line_item_pool.Enqueue(item); Debug.Log("添加至线池" + line_item_pool.Count); } #endregion }