Rallentatore
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 35 di 60.
Un valore di Time.timeScale compreso tra 0 e 1 produce un effetto al rallentatore. A 0.25, Time.deltaTime è un quarto del tempo reale di un fotogramma, quindi un'auto spostata da speed * Time.deltaTime percorre un quarto della sua 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 velocemente: 2 significa velocità doppia.
Per la fisica serve un'altra riga. Ogni passaggio della fisica fa comunque avanzare il gioco di Time.fixedDeltaTime, ovvero 0.02 secondi di tempo di gioco; con 0.25, questi richiedono 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 ripristina entrambi i valori in seguito, perché Unity non reimposta 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 ridotto, la fisica continua a eseguire 50 passaggi al secondo reale e ciascun passaggio 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
MedioFai volare la cometa attraverso la SlowZone al rallentatore.
- In
SlowZone.cs, scrivivoid OnTriggerEnter(Collider other): impostaTime.timeScalesuslowScaleeTime.fixedDeltaTimesu0.02f * slowScale. - Scrivi
void OnTriggerExit(Collider other): ripristinali a1fe0.02f.
Premi «Gioca» e Spazio: la cometa attraversa la zona a una velocità di 0.4. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// Rallentamento finché qualcosa si trova all'interno della zona
}
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti 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: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity