Срок службы = -1; не влияет на частицы Unity

Я нашел много тем, в которых говорилось, что если я хочу удалить конкретную частицу, мне просто нужно установить ее 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);
    }
}

person sdieters    schedule 24.02.2017    source источник
comment
Вы устанавливаете его на ноль, а не -1   -  person pinkfloydx33    schedule 25.02.2017
comment
Да, я пробовал пару вещей, о которых читал в разных темах, но безуспешно. Это была моя последняя попытка, прежде чем обратиться к SO.   -  person sdieters    schedule 25.02.2017


Ответы (1)


Вам просто нужно установить оставшееся время жизни частицы на 0 (если установлено на 0, частица исчезнет).

Ваш код не работает, потому что вы забыли добавить particles [i] = particle; в ветку else вашего if, вы никогда не устанавливаете время жизни на 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

person Galandil    schedule 25.02.2017
comment
Ах да, теперь я вижу! Я ненавижу, когда это что-то простое, как это, ха-ха. Большое спасибо! - person sdieters; 25.02.2017
comment
Не переживайте, со мной тоже такое было много раз! - person Galandil; 25.02.2017