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.