Unity 判断粒子结束

需求:大数据需要生成大量的粒子
设计:简单做法,做成粒子缓冲池,等待粒子生命周期结束放回池子里,需要的时候从池子取
可以增加过载系数,达到过载系数就增容一倍。

		private List<ParticleSystem> PullList;
        private List<ParticleSystem> PullUseList;
        
        ///取粒子
		private ParticleSystem GetParticleSystem()
        {
    
    
            for (int i = 0; i < PullList.Count; i++)
            {
    
    
                var particle =  PullList[0];
                PullUseList.Add(particle);
                PullList.RemoveAt(0);
                return particle;
            }

            return null;
        }
		
		///池子没了生成新的
        IEnumerator GetParticleAction(Action<ParticleSystem> callback)
        {
    
    
            yield return 0;
            var boll = GameObject.Instantiate<ParticleSystem>(normal_particleSystem, normal_particleSystem.transform.position, Quaternion.identity, ContainerManager.Instance.NormalContainer.transform);
            boll.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
            PullUseList.Add(boll);
            callback(boll);
        }


		///检查粒子是否结束
        public void RelesParticle()
        {
    
    
            if (PullUseList == null || PullUseList.Count < 0) return;
            for (int i = 0; i < PullUseList.Count; i++)
            {
    
    
                if (!PullUseList[i].IsAlive(true))
                {
    
    
                    PullUseList[i].Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
                    PullList.Add(PullUseList[i]);
                    PullUseList.RemoveAt(i);
                }
            }
        }
		
		//生成粒子
		public void CreateParticle()
		{
    
    
			RelesParticle();
            var boll =  GetParticleSystem();
            if(boll == null)
            {
    
    
                StartCoroutine(GetParticleAction((boll)=> 
                {
    
    
                    CreateNormalBoll(number, boll);
                }));
            }
            else
            {
    
    
                CreateNormalBoll(number, boll);
            }
		}

Guess you like

Origin blog.csdn.net/qq_41179365/article/details/119641200