Una delle prime complessità che ci si trova ad affrontare approcciandosi allo sviluppo di un videogame in Unity è la questione di rendere l’azione dipendente dal tempo o dai frame (Frame Dependant o Time Dependant). Tutto questo viene risolto analizzando questi due tipi di script che di fatto hanno un’unica differenza, cioè l’uso di Time.deltaTime nella funzione Update().

  1. //1. Con time.deltaTime
  2. transform.position = Vector3.Lerp(transform.position, target, smoothing * Time.deltaTime);
  3. //2. Senza time.deltaTime
  4. transform.position = Vector3.Lerp(transform.position, target, smoothing);

In sostanza, nel primo caso si sta dicendo che si vuole muovere il proprio oggetto con una velocità dipendente dal tempo (ad esempio metri al secondo). Questo garantisce che qualsiasi cosa accada durante (ad esempio un rallentamento dei frame dovuto a grafica eccessiva), l’azione da eseguire venga comunque compiuta rispetto al tempo a lei destinata.

Il seconda caso invece, senza Time.deltaTime, rende l’azione dipendente da frame e non dal tempo. Se dovessimo eseguire il codice su di una macchina lenta l’azione verrebbe eseguita più lentamente rispetto se eseguita su una macchina più veloce e performante. In alcuni casi il tutto potrebbe risultare “ingiocabile”.

E’ buona norma quindi utilizzare Time.deltaTime per ogni azione presente nel nostro applicativo al fine di renderla dipendente dal tempo e non dai frame. Ci sono alcune circostanze in cui può essere utile rendere l’applicativo dipendente dai frames ma sono più eccezioni che realtà.