Quindi, Unity non fa molti giochi ritmici su Android. Ho deciso di scoprirne il motivo e programmarne uno come compito (comunque i principi fondamentali). Il mio ostacolo più importante è l'input dell'utente. Poiché sappiamo che l'input è basato sul frame rate in unità, e un gioco musicale (presumo) preferirebbe il più piccolo ritardo possibile tra la pressione del pulsante e l'azione.Ingresso di un gioco ritmico
Se guardiamo alla musica, a circa 15-20 ms di ritardo, l'orecchio umano sente qualcosa "fuori ritmo".
Ho sentito i giochi Android Unity eseguiti a 30 FPS (poiché 60FPS fa schifo la batteria), matematica semplice indica: 1000/30 = 33ms per frame. Calcolando nei 15ms che probabilmente non possiamo notare, siamo a 18ms di possibile disastro. supponendo che raggiungiamo sempre questo 30FPS in qualsiasi momento.
Quando ottengo l'input da un utente, posso riprodurre un suono su quell'ingresso sullo stesso fotogramma. Tuttavia, potremmo essere 18ms fuori.
Ora c'è un modo per ottenere controlli DIRETTI da mouse e tastiera, che utilizza OnGui() invece di Update(), per ottenere gli eventi della tastiera o dei clic del mouse sul posto. Il problema è che Android probabilmente non funziona con questo, (questo non funziona neanche per i gamepad) ei metodi sembrano decisamente strani, specialmente quando proviamo a riprodurre suoni dal metodo OnGui().
La mia domanda: Cosa vorresti fare, e perché? Dovremmo semplicemente accettare i 18ms possibili, e supponiamo di raggiungere il 30FPS, o dovremmo cercare un modo affidabile per ottenere input direttamente, invece di aspettare che arrivi un aggiornamento?
Grazie per qualsiasi intuizione puoi darmi, non ho trovato nessun articolo su questo che sia ancora utile. -Smiley
EDIT ho solo fatto dei test di base con un metronomo, in esecuzione a 100FPS nell'editor (che dovrebbe essere di 10 ms per frame) toccando la mia barra spaziatrice su un metronomo all'interno dell'unità. I risultati che ho ottenuto sono stati semplicemente orribili. Toccando rapidamente: mi avvicino di 20 ms al mio tick metronomico, ma niente di più vicino. Toccando sul ritmo: ho ottenuto almeno 200ms dal mio bersaglio. A meno che non sia confuso con questo ritmo, questo è semplicemente sbagliato.
Attualmente utilizzo Debug.Log per ottenere i dati di test nel registro. Qualcuno può confermare per me se questa potrebbe essere la causa (causa qualche ritardo lungo? So che il debug non è ottimizzato), o il tempo è effettivamente così brutto?
Grazie in anticipo, -Smiley
[L'input in tempo reale affidabile è un problema per Unity] (http://forum.unity3d.com/threads/54154-Realtime-input-in-Unity). Per quanto riguarda i test personali, molte persone non si rendono conto che 'Debug.Log' è una chiamata * estremamente * costosa (spesso con 5 + ms). Ne vale spesso la pena per lo sviluppo, ma non lo consiglierei per alcun benchmark delle prestazioni. – rutter