private GameObjectPoolObject CreatePoolObject(GameObject go = null) { GameObject returnObj = null; if (go != null) { returnObj = go; } else { if (prefab != null) { returnObj = Instantiate(prefab); } else { return(null); } } returnObj.transform.SetParent(gameObject.transform); returnObj.SetActive(false); //使用PrefabInfo脚本保存returnObj的一些信息 GameObjectPoolObject poolObj = returnObj.GetComponent <GameObjectPoolObject>(); if (poolObj == null) { poolObj = returnObj.AddComponent <GameObjectPoolObject>(); } return(poolObj); }
/// <summary> /// “删除对象”放入对象池 /// </summary> /// <param name="obj">对象</param> public void Release(GameObject gobj) { if (gobj == null) { return; } if (m_queue.Count > maxCount) { //当前池中object数量已满,直接销毁 Object.Destroy(gobj); return; } GameObjectPoolObject poolObj = gobj.GetComponent <GameObjectPoolObject>(); if (poolObj != null) { if (poolObj.postTimes < m_disposeTimes) { Object.Destroy(gobj); return; } } else { poolObj = CreatePoolObject(gobj); } poolObj.UpdateTick(); //放入对象池,入队 m_queue.AddLast(poolObj); m_totalCount = Mathf.Max(m_totalCount, m_queue.Count); gobj.transform.SetParent(transform, false); //不改变Transform SetGameObjectDeactive(gobj); UpdateTick(); }