示例#1
0
        /// <summary>
        /// Creates a missing PooledItem and adds it to the pool.
        /// </summary>
        private static void CreateMissingPooledItem(Transform prefab, string itemName, bool spawn)
        {
            var clones = new List <Transform>();

            if (spawn)
            {
                clones.Add(CreateClone(prefab, clones.Count + 1, Instance.GetCategoryTransform(DEFAULT_CATEGORY_NAME)));
            }
            var pooledItem = new PooledItem(clones)
            {
                prefab            = prefab,
                poolTransform     = PoolTransform,
                categoryTransform = Instance.GetCategoryTransform(DEFAULT_CATEGORY_NAME)
            };

            Instance.items.Add(new Item()
            {
                prefab = prefab
            });
            Pool.Add(itemName, pooledItem);
#if UNITY_EDITOR
            if (PoolySettings.enableStatistics)
            {
                //pooledItem.ownStats = PoolyStatistics.ActivateStatsForPrefab(itemName, DEFAULT_CATEGORY_NAME, prefab, 0, null);
                pooledItem.ownStats = PoolyStatistics.GetStatisticsItem(null, DEFAULT_CATEGORY_NAME, itemName, prefab, 0);
            }
#endif
            if (Instance.debug)
            {
                Debug.Log("[Pooly] Object " + itemName + " was added to the pool.");
            }
        }
        /// <summary>
        /// Adds the items configured in this pool extension, as pooled items, to the main pool (Pooly)
        /// </summary>
        private void RegisterItemsToPooly()
        {
            if (registeredToPooly)
            {
                return;
            }
            if (items == null || items.Count == 0)
            {
                Debug.LogWarning("[Pooly] The '" + name + "' Pooly Extension is empty."); return;
            }
            for (int i = 0; i < items.Count; i++)
            {
                if (items[i].prefab == null)
                {
                    Debug.Log("[Pooly] There is an object with no prefab referenced in " + items[i].category + " in the " + name + " pool extension.");
                    continue;
                }
                if (Pooly.Pool.ContainsKey(items[i].prefab.name))
                {
                    Debug.Log("[Pooly] Object '" + items[i].prefab.name + "', found in the '" + name + "' pool extension, has already been added to the pool either by another Pooly Extension or by Pooly. No extra clones were created.");
                    continue;
                }
                if (Initialized)
                {
                    Pooly.Pool.Add(items[i].prefab.name, Pool[items[i].prefab.name]);
#if UNITY_EDITOR
                    if (PoolySettings.enableStatistics)
                    {
                        var pooledItem = Pool[items[i].prefab.name];
                        //pooledItem.ownStats = PoolyStatistics.ActivateStatsForPrefab(pooledItem.prefab.name, pooledItem.category, pooledItem.prefab, pooledItem.preloadCloneCount, this);
                        pooledItem.ownStats = PoolyStatistics.GetStatisticsItem(this, pooledItem.category, pooledItem.prefab.name, pooledItem.prefab, pooledItem.preloadCloneCount);
                    }
#endif
                }
                else
                {
                    Pooly.Instance.StartCoroutine(Pooly.Instance.CreateClones(items[i], PoolTransform, GetCategoryTransform(items[i]), this));
                }
            }
            registeredToPooly = true;
            initialized       = true;
        }
示例#3
0
        /// <summary>
        /// Created a pooled item for the given item and all the clones that need to be preloaded, in the specified pattern.
        /// </summary>
        public IEnumerator CreateClones(Item item, Transform poolTransform, Transform categoryTransform, PoolyExtension poolyExtension)
        {
            runningCoroutines++;
            var pooledItem = new PooledItem(new List <Transform>())
            {
                category                     = item.category,
                prefab                       = item.prefab,
                preloadCloneCount            = item.preloadCloneCount,
                limitCloneCount              = item.limitCloneCount,
                cloneCountLimit              = item.cloneCountLimit,
                limitCloneCreationPerFrame   = item.limitCloneCreationPerFrame,
                clonesOnFirstFrame           = item.clonesOnFirstFrame,
                clonesPerFrame               = item.clonesPerFrame,
                delayCreatingClonesForFrames = item.delayCreatingClonesForFrames,
                allowInstantiateMore         = item.allowInstantiateMore,
                allowRecycleClones           = item.allowRecycleClones,
                debug             = item.debug,
                poolTransform     = poolTransform,
                categoryTransform = categoryTransform
            };

            Pooly.Pool.Add(item.prefab.name, pooledItem);
#if UNITY_EDITOR
            if (PoolySettings.enableStatistics)
            {
                //pooledItem.ownStats = PoolyStatistics.ActivateStatsForPrefab(item.prefab.name, item.category, item.prefab, item.preloadCloneCount, poolyExtension);
                pooledItem.ownStats = PoolyStatistics.GetStatisticsItem(poolyExtension, item.category, item.prefab.name, item.prefab, item.preloadCloneCount);
            }
#endif
            int cloneNumber = 1;
            auxCloneTransform = null;
            if (item.limitCloneCreationPerFrame)
            {
                if (item.clonesOnFirstFrame > 0)
                {
                    while (cloneNumber <= item.preloadCloneCount && cloneNumber <= item.clonesOnFirstFrame)
                    {
                        auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform);
                        Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform);
                        cloneNumber++;
                    }
                }

                if (item.delayCreatingClonesForFrames > 0)
                {
                    int delayedFrames = 0;
                    while (delayedFrames <= item.delayCreatingClonesForFrames)
                    {
                        yield return(null); delayedFrames++;
                    }
                }
                while (cloneNumber <= item.preloadCloneCount)
                {
                    auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform);
                    Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform);
                    if (cloneNumber % item.clonesPerFrame == 0)
                    {
                        yield return(null);
                    }
                    cloneNumber++;
                }
            }
            else
            {
                while (cloneNumber <= item.preloadCloneCount)
                {
                    auxCloneTransform = CreateClone(item.prefab, cloneNumber, categoryTransform);
                    Pooly.Pool[item.prefab.name].DisabledClones.Add(auxCloneTransform);
                    cloneNumber++;
                }
            }
            if (poolyExtension != null)
            {
                poolyExtension.Pool.Add(item.prefab.name, pooledItem);
            }
            runningCoroutines--;
        }