我发现很多主题说如果我想删除特定的粒子,我只需要将LifeTime
设置为-1
。
我知道我的循环工作正常,因为每个粒子的移动按计划进行,我可以在到达目的地时看到我的日志中的“移除粒子”调试行。有什么变化,或者我错过了一些简单的东西吗?
我正在使用Unity 5,4,3f1 Personal
void Update ()
{
if(Input.GetKeyDown(KeyCode.Space)) PlayParticleEffect();
if (particleSystem != null) {
particles = new ParticleSystem.Particle[particleSystem.particleCount];
int count = particleSystem.GetParticles (particles);
for (int i = 0; i < count; i++) {
ParticleSystem.Particle particle = particles [i];
float dist = Vector3.Distance (particleTarget.transform.position, particle.position);
if (dist > 0.1f) {
particle.position = Vector3.MoveTowards (particle.position, particleTarget.transform.position, Time.deltaTime * 10);
particles [i] = particle;
} else {
particle.lifetime = -0;
Debug.Log ("remove particle");
}
}
particleSystem.SetParticles (particles, count);
}
}
答案 0 :(得分:1)
你只需要将粒子的剩余寿命设置为0(如果它设置为0,粒子就会消失)。
您的代码无效,因为您忘记在if的else分支中添加particles [i] = particle;
,您永远不会将生命周期设置为0到实际粒子:
if (dist > 0.1f) {
particle.position = Vector3.MoveTowards (particle.position, Vector3.zero, Time.deltaTime * 10);
particles [i] = particle;
} else {
particle.remainingLifetime = 0;
particles [i] = particle;
}
P.S。:我使用remainingLifetime
代替lifetime
,因为我使用的是Unity 5.5