Skip to content Skip to sidebar Skip to footer

Differenze prestazionali tra InvokeRepeating e StartCoroutine in Unity

E’ chiaro che alcune funzioni di Unity siano state sviluppate più come “utilities mordi e fuggi” che vere e proprie funzioni ottimizzate.

Una di queste è sicuramente InvokeRepeating che permette di chiamare un metodo standard ogni tot secondi (e con un delay di partenza). Questa funzione però, se analizzata con Reflector, espone una problematica principale: si basa sulla Reflection che, a runtime, indubbiamente è un processo MOLTO lento e dispendioso. Per questo motivo il suo uso va effettivamente evitato.

In sostituzione a InvokeRepeating possiamo facilmente usare le Coroutines che invece sono state sviluppate e rese disponibili proprio per ottimizzazioni di questo tipo. Sento già i puritani parlare di “Coroutine sono il male” parlando di chiamata di funzioni nella FixedUpdate, Time.deltaTime, etc etc. ALT! Non è questo il post in cui parlaremo delle prestazioni delle Coroutine.

Quindi, la nostra funzione:

    InvokeRepeating("Fire", 2.0f, 0.5f);

Diventa:

...
StartCoroutine("StartFireSequence_Enumerator");
...

IEnumerator StartFireSequence_Enumerator()
{
        yield return new WaitForSeconds(2.0f);
        while (true)
        {
            Fire();
            yield return new WaitForSeconds(0.5f);
        }
}

Copyright © Desdinova ® / PIVA 03799780162 / Non è una testata giornalistica.
Tutti i diritti riservati ai legittimi proprietari, anche ove non citati.