Example #1
0
        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);
        }
Example #2
0
        /// <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();
        }