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