Approccio: velocità di simulazione più elevata
I tempi per l'interfaccia utente dovrebbero essere disaccoppiati dal ciclo di gioco reale, così come il rendering. Supponiamo ad esempio che il tuo mondo funzioni a velocità 4x. Diciamo che alla tua velocità di base (1x), il tuo gioco esegue 30 aggiornamenti al secondo.
Avresti quindi qualcosa di simile al seguente, quando in modalità di avanzamento rapido:
- La logica mondiale esegue 4 aggiornamenti per ogni aggiornamento dell'interfaccia utente e del renderer. Ciò significa che deve eseguire 120 aggiornamenti al secondo. Pertanto, il tuo modello mondiale (dati) viene aggiornato a questo ritmo.
- La logica di rendering e UI continuano entrambi a eseguire il polling o a fare qualsiasi cosa con 30 aggiornamenti al secondo.
In altre parole, il gioco nel suo insieme non funziona più velocemente. La parte di simulazione è.
Puoi dedurre due cose da questo:
Devi mantenere la tua logica di gioco abbastanza semplice da poterla eseguire facilmente quattro volte più velocemente sulla tua piattaforma di destinazione, OPPURE devi introdurre metodi per estrapolare più rapidamente vari aspetti del gameplay; ciò può comportare, tuttavia, un modello che è diverso da come sarebbe stato se avessi semplicemente usato una simulazione più veloce. Quindi il compromesso sarebbe l'elaborazione dei costi per l'accuratezza. Vedi l'approccio 2, di seguito.
È la separazione delle preoccupazioni che ti consente di velocizzare facilmente la tua simulazione mondiale, essendo quella separazione come modello, vista e controller ( MVC ). Se i tuoi dati mondiali (M), la logica di rendering (V) e la logica di gioco (C) sono tutti confusi, non sarai davvero in grado di farlo, almeno non senza un'enorme emicrania.
Approccio: estrapolazione basata su delta temporali
Come accennato in precedenza, dovrai calcolare il movimento in base alla distanza percorsa da qualcosa in un determinato momento. Questo presuppone che la fisica del tuo gioco sia intrinsecamente più realistica nella loro simulazione, tuttavia, che potrebbe non essere il caso. Questo è un argomento piuttosto più ampio e considerevolmente più complesso. Dovrai porre ulteriori domande se vuoi sapere. In sostanza, eseguirai alcuni calcoli per ottenere le cose giuste. Dovrai affrontare la compenetrazione in caso di collisione e una serie di altre questioni che non affronterò qui.
Concludere
Questo ti dà lo schema generale. La scelta della lingua è tua, presumibilmente o sai come farlo in Unity oppure no. Il tempismo in qualsiasi lingua richiede di comprendere in dettaglio i dettagli, suggerirei di iniziare con gli articoli di Gaffer e di consultare i documenti dell'API di Unity.