예제 #1
0
        /// <summary>
        /// 初始化对象池
        /// </summary>
        /// <param name="poolName">对象池名字</param>
        /// <param name="poolObj">对象池对象</param>
        /// <param name="capacity">对象池容量</param>
        /// <param name="autoReleaseInterval">自动释放间隔秒数</param>
        /// <param name="expireTime">对象过期秒数</param>
        /// <returns></returns>
        public void Init(string poolName, PoolObject poolObj, int capacity, float autoReleaseInterval = 60f, float expireTime = 60f)
        {
            this.poolName = poolName;
            this.poolObj  = poolObj;
            spawns        = new List <PoolObject>();
            desSpawns     = new List <PoolObject>();

            this.autoReleaseInterval = autoReleaseInterval;
            this.capacity            = capacity;
            this.expireTime          = expireTime;

            autoReleaseTime = 0f;

            //填池
            for (int i = 0; i < capacity; i++)
            {
                Spawn();
            }
            DesAllSpawn();
        }
예제 #2
0
        /// <summary>
        /// 回收对象
        /// </summary>
        /// <param name="obj"></param>
        public bool DesSpawn(PoolObject obj, Action <PoolObject> action = null)
        {
            bool isDesSpawn = false;

            if (obj == null)
            {
                Debug.LogError("UnSpawn obj is null!");
                return(isDesSpawn);
            }

            foreach (var po in spawns)
            {
                if (po == obj)
                {
                    po.gameObject.SetActive(false);
                    po.CancelInvoke();
                    po.inDesSpawnTime = Time.time;
                    desSpawns.Add(obj);

                    //检查是否超出数量
                    if (Count > capacity)
                    {
                        Release();
                    }

                    if (action != null)
                    {
                        action.Invoke(obj);
                    }

                    isDesSpawn = true;
                    return(isDesSpawn);
                }
            }

            return(isDesSpawn);
        }
예제 #3
0
 private void Awake()
 {
     poolObject             = GetComponent <PoolObject>();
     sphereCollider         = GetComponent <SphereCollider>();
     sphereCollider.enabled = false;
 }
예제 #4
0
 private void Start()
 {
     poolObject = GetComponent <PoolObject>();
 }
예제 #5
0
 private void Awake()
 {
     poolObject = GetComponent <PoolObject>();
 }