Skip to content Skip to sidebar Skip to footer

Perchè usare Mathf.Lerp in Unity

Sappiamo che in Unity è doveroso implementare ogni azione utilizzando Time.deltaTime (qui un approfondimento) in modo da renderle dipendenti dal tempo e non dal frame rate.

La funzione Mathf.Lerp viene usata per ottenere un valore comprensivo tra un valore iniziale e uno finale, dipendente da un valore arbitrario tra 0 e 1. Se il valore passato a Mathf.Lerp è 0 verrà ritornato il valore iniziale, se il valore è 1 verrà ritornato il valore finale. Tutti i valori intermedi tra 0 e 1 generano invece un risultato compreso tra l’iniziale e il finale, pesato tra i due valori.

Questa funzione quindi si rende utile quando serve realizzare una transizione tra due valori noti. Si provi a pensare la necessità di eseguire una dissolvenza (fade) di un colore passando da alpha = 255 a alpha = 0. La funzione sarebbe quindi Mathf.Lerp(255, 0, t) dove t è un valore compreso tra 0 e 1. Passando 0.5 si otterrà quindi, ad esempio, 125.

La funzione sottostante in pseudo-codice mostra come, dato il valore della durata della transizione (5.0f secondi) è possibile ottenere un valore alpha interpolato, dipendente dal tempo trascorso (ecco perchè Time.deltaTime).

        var t = 0f;
        var duration = 5.0f
        while (t < 1)
        {
            t += Time.deltaTime / duration;
            endColor.a = Mathf.Lerp(startColor.a, 0, t);
            this.FadePanel.GetComponent<RawImage>().color = endColor;
        }

Tutte le volte che dobbiamo quindi eseguire una transazione (cambiare un colore, generare una rotazione, spostare da un punto A ad uno B, il consiglio è sempre quello di utilizzare la funzione Mathf.Lerp (esiste quella specifica Mathf.LerpAngle per gli angoli che tiene conto della rotazione a 360°) facendo dipendere il valore t da Time.deltaTime in modo da rendere la transizione smooth ma anche regolata dal tempo.

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