Beispiel #1
0
        public void ForceClearAll()
        {
#if UNITY_EDITOR
            InPoolCounter.Clear();
            OutOfPoolBundles.Clear();
#endif
            while (pools.GetEnumerator().MoveNext())
            {
                var item = pools.GetEnumerator().Current;
                DestroyPool(item.Value);
            }
            pools.Clear();
        }
Beispiel #2
0
        private PrefabPool CreatePool(string assetName)
        {
            var pool = pools[assetName];

            if (pool == null)
            {
#if UNITY_EDITOR
                if (InPoolCounter.ContainsKey(assetName))
                {
                    InPoolCounter[assetName]++;
                }
                else
                {
                    InPoolCounter.Add(assetName, 1);
                }
#endif
                pool = new PrefabPool(assetName);
                pools.Add(assetName, pool);
            }
            return(pool);
        }
Beispiel #3
0
        private void CheckAndDestoryPool(bool cleanPreloadPool)
        {
            var curTime = Time.time;

            if (curTime - lastCleanPoolTime > 1)
            {
                lastCleanPoolTime = curTime;
            }
            else
            {
                return;
            }

            cleanPreloadPool &= CleanPreloadPool;
            using (var removeList = TempList <string> .Alloc())
            {
                while (pools.GetEnumerator().MoveNext())
                {
                    var item = pools.GetEnumerator().Current;
                    if (item.Value.IsTemporaryPool || cleanPreloadPool)
                    {
                        if (item.Value.CanDestory() && curTime - item.Value.LastUsedTime > AutoCleanTime)
                        {
                            removeList.Add(item.Key);
                        }
                    }
                }

                for (var i = 0; i < removeList.Count; ++i)
                {
#if UNITY_EDITOR
                    InPoolCounter.Remove(removeList[i]);
                    OutOfPoolBundles.Remove(removeList[i]);
#endif
                    var pool = pools[removeList[i]];
                    DestroyPool(pool);
                    pools.Remove(removeList[i]);
                }
            }
        }