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.
Desafio
MédioUm 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
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco