生命周期 = -1;不影响 Unity 粒子

Lifetime = -1; does not effect Unity particles

我发现很多话题都说如果我想删除一个特定的粒子,我只需要将它的 LifeTime 设置为 -1

我知道我的循环工作正常,因为每个粒子的运动都按计划进行并且我可以在到达目的地的那一刻在我的日志中看到 "remove particle" 调试行。随着时间的推移有什么变化吗,还是我遗漏了一些简单的东西?

我使用的是 Unity 5,4,3f1 个人版

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即可(设置为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