public GameObject Get()
        {
            GameObject obj;

            if (PoolObjs.Count > 0)
            {
                obj = PoolObjs[0];
                PoolObjs.RemoveAt(0);
            }
            else
            {
                if (Prefab == null)
                {
                    obj = InstantiateFunc.Invoke();
                }
                else
                {
                    obj = GameObject.Instantiate(Prefab);
                }
            }

            AliveObjs.Add(obj);
            obj.SetActive(true);

            return(obj);
        }
        public T Get()
        {
            T component;

            if (PoolObjs.Count > 0)
            {
                component = PoolObjs[0];
                PoolObjs.RemoveAt(0);

                component.Reinstantiate();
            }
            else
            {
                if (Prefab == null)
                {
                    component = InstantiateFunc.Invoke();
                }
                else
                {
                    component = GameObject.Instantiate(Prefab);
                }

                component.Instantiate();
            }

            AliveObjs.Add(component);

            return(component);
        }
Beispiel #3
0
 public void Clear()
 {
     while (PoolObjs.Count > 0)
     {
         GameObject.Destroy(PoolObjs.Pop());
     }
 }
 public void ClearPoolObjs()
 {
     while (PoolObjs.Count > 0)
     {
         GameObject.Destroy(PoolObjs[0]);
         PoolObjs.RemoveAt(0);
     }
 }
 public void Put(GameObject obj)
 {
     AliveObjs.Remove(obj);
     PoolObjs.Add(obj);
     obj.SetActive(false);
     if (PoolCollection != null)
     {
         obj.transform.SetParent(PoolCollection);
     }
 }
Beispiel #6
0
        public bool Recycle(GameObject poolObj)
        {
            if (poolObj == null)
            {
                return(false);
            }
            var poolScript = poolObj.GetComponent <IPoolable>();

            if (poolScript == null)
            {
                return(false);
            }
            if (!poolScript.Active)
            {
                return(false);
            }
            PoolObjs.Push(poolObj);
            poolScript.OnRecycle();
            return(true);
        }
Beispiel #7
0
        public GameObject Spawn()
        {
            GameObject requiredObj;
            IPoolable  poolScript;

            if (PoolObjs.Count == 0)
            {
                requiredObj = GameObject.Instantiate(Prefab);
                poolScript  = requiredObj.GetComponent <IPoolable>();
                if (poolScript == null)
                {
                    poolScript = requiredObj.AddComponent <BasePoolObj>();
                    poolScript.RecycleToPool += Recycle;
                }
            }
            else
            {
                requiredObj = PoolObjs.Pop();
                poolScript  = requiredObj.GetComponent <IPoolable>();
            }
            poolScript.OnSpawn();
            return(requiredObj);
        }
 public void Put(T component)
 {
     component.DeactivateObj(PoolCollection);
     AliveObjs.Remove(component);
     PoolObjs.Add(component);
 }