Esempio n. 1
0
    /// <summary>
    /// 清除掉某一个对象的所有对象池缓存
    /// </summary>
    public static void CleanPoolByName(string name)
    {
        Debug.Log("CleanPool :" + name);
        if (recyclePools.ContainsKey(name))
        {
            List <GameObject> l_objList = recyclePools[name];

            for (int i = 0; i < l_objList.Count; i++)
            {
                GameObject go = l_objList[i];

                PoolObject po = go.GetComponent <PoolObject>();
                if (po)
                {
                    po.OnObjectDestroy();
                }

                GameObject.Destroy(go);
            }
            l_objList.Clear();
            recyclePools.Remove(name);
        }

        if (createPools[name].Count == 0)
        {
            createPools.Remove(name);
            AssetsPoolManager.DestroyByPool(name);
        }
    }
 private void OnDestroy()
 {
     if (!string.IsNullOrEmpty(iconName))
     {
         AssetsPoolManager.DestroyByPool(iconName);
     }
 }
Esempio n. 3
0
    private void LoadQueue()
    {
        if (currentNum >= count)
        {
            RunCallBack();
            Destroy();
            return;
        }
        PreloadResourcesDataGenerate da = queueRes[currentNum];

        currentNum++;
        //Debug.Log("da.m_key " + da.m_key);
        try
        {
            Type resType = ReflectionUtils.GetTypeByTypeFullName(da.m_ResType);

            //  object loadRes = AssetsPoolManager.Load(da.m_key);
            AssetsPoolManager.LoadAsync(da.m_key, resType, (LoadState loadState, object loadRes) =>
            {
                if (loadState.isDone)
                {
                    if (loadRes != null)
                    {
                        if (loadRes is GameObject)
                        {
                            GameObject prefab         = (GameObject)loadRes;
                            List <GameObject> resList = new List <GameObject>();
                            for (int i = 0; i < da.m_instantiateNum; i++)
                            {
                                GameObject obj = GameObjectManager.CreateGameObjectByPool(prefab);
                                resList.Add(obj);
                            }
                            foreach (var obj in resList)
                            {
                                GameObjectManager.DestroyGameObjectByPool(obj, !da.m_createInstanceActive);
                            }
                        }
                        else
                        {
                            AssetsPoolManager.DestroyByPool(da.m_key);
                        }
                    }
                    else
                    {
                        if (loadRes == null)
                        {
                            Debug.LogError("Error: 预加载失败  key:" + da.m_key);
                        }
                    }
                    RunCallBack();
                    LoadQueue();
                }
            });
        }
        catch (Exception e)
        {
            Debug.LogError(e);
            LoadQueue();
        }
    }
Esempio n. 4
0
    /// <summary>
    /// 清空对象池
    /// </summary>
    public static void CleanPool()
    {
        //Debug.LogWarning("清空对象池");
        removeObjList.Clear();

        foreach (string name in createPools.Keys)
        {
            //if (recyclePools.ContainsKey(name))
            //{
            //    List<GameObject> l_objList = recyclePools[name];

            //    for (int i = 0; i < l_objList.Count; i++)
            //    {
            //        GameObject go = l_objList[i];

            //        PoolObject po = go.GetComponent<PoolObject>();
            //        if (po)
            //        {
            //            po.OnObjectDestroy();
            //        }

            //        GameObject.Destroy(go);
            //    }
            //    l_objList.Clear();
            //    recyclePools.Remove(name);
            //}

            if (createPools[name].Count == 0)
            {
                removeObjList.Add(name);
                AssetsPoolManager.DestroyByPool(name);
            }
        }

        foreach (var item in removeObjList)
        {
            createPools.Remove(item);
        }

        foreach (var name in recyclePools.Keys)
        {
            List <GameObject> l_objList = recyclePools[name];

            for (int i = 0; i < l_objList.Count; i++)
            {
                GameObject go = l_objList[i];

                PoolObject po = go.GetComponent <PoolObject>();
                if (po)
                {
                    po.OnObjectDestroy();
                }

                GameObject.Destroy(go);
            }
            l_objList.Clear();
        }
        recyclePools.Clear();
    }
Esempio n. 5
0
 public void UnloadClip(AudioAsset asset)
 {
     if (asset.audioSource.clip != null)
     {
         string name = asset.assetName;
         asset.audioSource.clip = null;
         AssetsPoolManager.DestroyByPool(name);
     }
 }
Esempio n. 6
0
 private void ClearLoadSprite()
 {
     foreach (var item in loadSpriteNames)
     {
         int num = item.Value;
         //Debug.Log("UIBase 回收图片:" + item.Key + ":" + num);
         AssetsPoolManager.DestroyByPool(item.Key, num);
     }
     loadSpriteNames.Clear();
 }
Esempio n. 7
0
    public static void Release()
    {
        s_languageDataDict.Clear();
        isInit = false;

        foreach (var item in loadTextFileTimesDic)
        {
            AssetsPoolManager.DestroyByPool(item.Key, item.Value);
        }
        loadTextFileTimesDic.Clear();
    }
Esempio n. 8
0
 private void ClearLoadSprite()
 {
     foreach (var item in loadSpriteNames)
     {
         int num = item.Value;
         for (int i = 0; i < num; i++)
         {
             AssetsPoolManager.DestroyByPool(item.Key);
         }
     }
     loadSpriteNames.Clear();
 }
Esempio n. 9
0
    /// <summary>
    /// 将一个对象放入对象池
    /// </summary>
    /// <param name="go"></param>
    /// <param name="isSetInactive">是否将放入的物体设为不激活状态(obj.SetActive(false))</param>
    public static void DestroyGameObjectByPool(GameObject go, bool isSetInactive = true)
    {
        string key = go.name.Replace("(Clone)", "");

        if (s_objectPool.ContainsKey(key) == false)
        {
            s_objectPool.Add(key, new List <GameObject>());
        }

        if (s_objectPool[key].Contains(go))
        {
            throw new Exception("DestroyGameObjectByPool:-> Repeat Destroy GameObject !" + go);
        }

        s_objectPool[key].Add(go);

        if (isSetInactive)
        {
            go.SetActive(false);
        }
        else
        {
            go.transform.position = s_OutOfRange;
        }

        go.name = key;
        go.transform.SetParent(PoolParent);
        PoolObject po = go.GetComponent <PoolObject>();

        if (po)
        {
            po.OnRecycle();
        }
        if (createPools.ContainsKey(key) && createPools[key].Contains(go))
        {
            createPools[key].Remove(go);
            //Debug.LogWarning(go.name + " ==>>" + createPools[key].Count);
            if (createPools[key].Count == 0)
            {
                createPools.Remove(key);
                AssetsPoolManager.DestroyByPool(key);
            }
        }
    }
Esempio n. 10
0
 private void OnDestroy()
 {
     AssetsPoolManager.DestroyByPool(iconName);
 }