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);
        }
}

Aiuto aziende e professionisti che hanno bisogno di sviluppare in modo creativo, alternativo ed efficace la loro identità digitale e che desiderano ottenere visibilità e risultati concreti attraverso lo sviluppo di strumenti online dall'elevata innovazione e personalizzazione (3D, Realtà Virtuale, Realtà Aumentata, Advergame, etc)