Rallentatore
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 34 di 56.
Un Time.timeScale compreso tra 0 e 1 indica il rallentatore. A 0.25, Time.deltaTime è un quarto del tempo reale di un fotogramma, quindi un’auto spostata usando speed * Time.deltaTime percorre un quarto della distanza ogni secondo reale, i Rigidbody volano e cadono a un quarto della loro velocità e WaitForSeconds(1f) dura 4 secondi reali. Oltre 1, il gioco procede più velocemente: 2 significa velocità doppia.
Per la fisica serve un’altra riga. Ogni passo della fisica fa comunque avanzare il gioco di Time.fixedDeltaTime, cioè 0.02 secondi di tempo di gioco, e a 0.25 quei secondi durano 0.08 secondi reali: FixedUpdate() viene eseguito solo 12.5 volte al secondo reale, quindi i corpi si muovono un fotogramma ogni cinque e procedono a scatti. Riduci il passo dello stesso fattore e poi ripristina entrambi i valori, perché Unity non ripristina mai fixedDeltaTime autonomamente. Questo script rallenta il gioco mentre tieni premuto Space:
float normalStep;
void Awake()
{
normalStep = Time.fixedDeltaTime; // 0.02 in un nuovo progetto
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Time.timeScale = 0.25f;
Time.fixedDeltaTime = normalStep * Time.timeScale;
}
if (Input.GetKeyUp(KeyCode.Space))
{
Time.timeScale = 1f;
Time.fixedDeltaTime = normalStep;
}
}Con il passo più breve, la fisica esegue ancora 50 passi al secondo reale e ciascun passo copre un quarto del tempo di gioco, quindi il rallentatore rimane fluido. Il passo è espresso in secondi di gioco, quindi il codice in FixedUpdate() che usa Time.deltaTime continua a funzionare senza modifiche.
Sfida
MedioUna cometa attraversa il cielo e Space la lancia da sinistra (Launcher.cs, pronto). Lungo il percorso attraversa la SlowZone, una zona di attivazione, e quella parte del suo volo dovrebbe svolgersi al rallentatore. Scrivi SlowZone.cs:
- Quando qualcosa entra nella zona, il tempo di gioco scorre a
slowScale(0.4 nell'Inspector) e il passo della fisica si riduce dello stesso fattore rispetto a 0.02, così la cometa continua a muoversi fluidamente. - Quando esce dalla zona, il tempo torna a scorrere alla velocità normale e il passo della fisica torna a 0.02.
Premi Play, premi Space e guarda la cometa attraversare la zona, poi Check.
Provalo tu
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// Rallentamento finché qualcosa si trova all'interno della zona
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input