Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Una 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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi