Exemple #1
0
        // Returns an instance of the prefab
        public GameObject GetObject()
        {
            GameObject spawnedGameObject;

            // if there is an inactive instance of the prefab ready to return, return that
            if (inactiveInstances.Count > 0)
            {
                // remove the instance from teh collection of inactive instances
                spawnedGameObject = inactiveInstances.Pop();
            }
            // otherwise, create a new instance
            else
            {
                spawnedGameObject = (GameObject)GameObject.Instantiate(prefab);

                // add the PooledObject component to the prefab so we know it came from this pool
                PooledUI pooledObject = spawnedGameObject.AddComponent <PooledUI>();
                pooledObject.pool = this;
            }

            // enable the instance
            spawnedGameObject.SetActive(true);

            // return a reference to the instance
            return(spawnedGameObject);
        }
Exemple #2
0
        // Return an instance of the prefab to the pool
        public void ReturnObject(GameObject toReturn)
        {
            PooledUI pooledObject = toReturn.GetComponent <PooledUI>();

            // if the instance came from this pool, return it to the pool
            if (pooledObject != null && pooledObject.pool == this)
            {
                // disable the instance
                toReturn.SetActive(false);

                // add the instance to the collection of inactive instances
                inactiveInstances.Push(toReturn);
            }
            // otherwise, just destroy it
            else
            {
                Debug.LogWarning(toReturn.name + " was returned to a pool it wasn't spawned from! Destroying.");
                Destroy(toReturn);
            }
        }