Menu
CoddyTech

Câmera lenta

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 34 de 56.

Um Time.timeScale entre 0 e 1 resulta em câmera lenta. Em 0.25, Time.deltaTime é um quarto do tempo real de um quadro, então um carro movido por speed * Time.deltaTime percorre um quarto da distância a cada segundo real, os Rigidbodies voam e caem a um quarto da velocidade, e WaitForSeconds(1f) dura 4 segundos reais. Acima de 1, o jogo roda mais rápido: 2 é o dobro da velocidade.

A física precisa de mais uma linha. Cada passo da física ainda avança o jogo em Time.fixedDeltaTime, 0.02 segundos de tempo de jogo, e em 0.25 isso leva 0.08 segundos reais: FixedUpdate() roda apenas 12.5 vezes por segundo real, então os corpos se movem um quadro a cada cinco e dão trancos. Reduza o passo pelo mesmo fator e restaure os dois valores depois, pois o Unity nunca redefine fixedDeltaTime por conta própria. Este script desacelera o jogo enquanto Space estiver pressionada:

float normalStep;

void Awake()
{
    normalStep = Time.fixedDeltaTime;   // 0.02 em um projeto novo
}

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;
    }
}

Com o passo menor, a física ainda avança 50 vezes por segundo real e cada passo cobre um quarto do tempo de jogo, então a câmera lenta continua suave. O passo é medido em segundos de jogo, portanto o código em FixedUpdate() que usa Time.deltaTime continua funcionando sem alterações.

challenge icon

Desafio

Médio

Um cometa cruza o céu, e a tecla Space o lança da esquerda (Launcher.cs, pronto). No caminho, ele atravessa a SlowZone, uma caixa de gatilho, e esse trecho do voo deve acontecer em câmera lenta. Escreva SlowZone.cs:

  • Quando algo entrar na zona, o tempo do jogo passa a correr em slowScale (0.4 no Inspector), e o passo da física diminui pelo mesmo fator a partir de 0.02, para que o cometa continue se movendo suavemente.
  • Quando sair da zona, o tempo volta a correr na velocidade normal, com o passo da física novamente em 0.02.

Pressione Play, pressione Space e observe o cometa atravessá-la, depois Check.

Experimente você mesmo

using UnityEngine;

public class SlowZone : MonoBehaviour
{
    public float slowScale = 0.4f;

    // Câmera lenta enquanto algo estiver dentro da zona
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade