Risposte:
FixedUpdate
può funzionare più veloce o più lento rispetto a Update
seconda delle impostazioni. Dipende dal carico (quanto veloce Update
è in esecuzione) e dalla velocità impostata FixedUpdate
(disponibile in Modifica-> Impostazioni progetto-> Tempo). Idealmente, poiché Update
viene eseguito una volta per frame, è qui che si desidera acquisire l'input. Se devi agire sull'input nel FixedUpdate
metodo (come controllare i corpi fisici), imposta i flag Update
e gestiscili in FixedUpdate
:
bool leftMouseDown = false;
void Update()
{
if(Input.GetMouseButtonDown(0))
leftMouseDown = true;
}
void FixedUpdate()
{
if(leftMouseDown )
{
//update physics bodies with input
leftMouseDown = false;
}
}
È comunque una buona idea controllare la fisica dal FixedUpdate
metodo, poiché è improbabile che la fisica debba essere aggiornata spesso, e la fisica su un aggiornamento fisso è molto più facile da prevedere ( determinismo ) rispetto alla fisica su un aggiornamento variabile.
FixedUpdate
. Questa è una di quelle cose che richiedono alcuni test di gioco per capire davvero cosa "sembra" giusto.
Devi capire cosa fa ciascuno. Update()
viene chiamato il più spesso possibile (non sono sicuro, forse può essere limitato), in entrambi i casi - ogni frame. FixedUpdate()
viene chiamato per ogni costante di tempo (quindi "fisso").
L'input entra in Update()
, così semplice (perché come hai notato FixedUpdate()
potrebbe non catturare l'evento di input). La logica di gioco tuttavia potrebbe andare in uno dei due. La fisica deve essere deterministica ed è per questo che dovrebbe esserlo FixedUpdate()
. Altre cose non devono. A seconda dell'uso, è necessario decidere quale funzione è appropriata.
Althouth vale la pena di dire che alcune applicazioni hanno tutto l'aggiornamento della logica di gioco FixedUpdate()
(anche al di fuori di Unity
) - si chiama "ciclo di gioco a passaggio fisso". Avere tutto il codice di aggiornamento in una funzione a passaggio fisso ti dà determinismo e rende più probabile che la tua app si comporti allo stesso modo ogni volta (e su ciascun dispositivo). Permette anche alcune funzioni fantasiose, come i replay.