Unity cra sh, когда я пытаюсь медленно заставить систему частиц исчезнуть (C код) - PullRequest
0 голосов
/ 28 марта 2020

Я что-то сделал и по какой-то причине единство просто рухнуло после выполнения этого кода. Что я хочу сделать, так это медленно заставить систему частиц исчезнуть. Это код:

public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;
private void Start()
{
    ParticleSystem = GetComponent<ParticleSystem>();
    OriginalTimeToDestroy = TimeToDestroy;
    MaxParticle = ParticleSystem.maxParticles;
    OriginalMaxParticle = MaxParticle;
    Destroy(gameObject, TimeToDestroy);
    while (TimeToDestroy >= 0)
    {
        MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
        ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
    }
    Destroy(gameObject);
}
private void Update()
{
    TimeToDestroy -= Time.deltaTime;
}

1 Ответ

0 голосов
/ 28 марта 2020

Малфегал все это сказал, у тебя бесконечное число oop. Вы никогда не предоставляете баку контроль Unity, так что Update может работать (и TimeToDestroy уменьшается), поэтому он зависает. Либо используйте метод обновления в соответствии с рекомендациями Малфегала, либо сделайте Start сопрограмму.

Путь сопрограммы

public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;

private IEnumerator Start()
{
    ParticleSystem = GetComponent<ParticleSystem>();
    OriginalTimeToDestroy = TimeToDestroy;
    MaxParticle = ParticleSystem.maxParticles;
    OriginalMaxParticle = MaxParticle;
    while (TimeToDestroy >= 0)
    {
        MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
        ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
        yield return null;
        TimeToDestroy -= Time.deltaTime;
    }
    Destroy(gameObject);
}

Update способ

public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;

private void Start()
{
    ParticleSystem = GetComponent<ParticleSystem>();
    OriginalTimeToDestroy = TimeToDestroy;
    MaxParticle = ParticleSystem.maxParticles;
    OriginalMaxParticle = MaxParticle;
}

private void Update()
{
    if(TimeToDestroy >= 0)
    {
        TimeToDestroy -= Time.deltaTime;
        MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
        ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
    }
    else
        Destroy(gameObject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...