寿命= -1;不影响Unity粒子

时间:2017-02-24 23:58:59

标签: c# unity3d particle-system

我发现很多主题说如果我想删除特定的粒子,我只需要将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);
    }
}

1 个答案:

答案 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