Tempo não escalado
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 35 de 56.
Um jogo pausado ou em câmera lenta ainda precisa de um relógio real para algumas coisas: um menu de pausa com animação, uma contagem regressiva antes de o jogo continuar, um congelamento que precisa terminar sozinho. Time.unscaledDeltaTime é o tempo real desde o último quadro, seja qual for o valor de Time.timeScale, e Time.unscaledTime é o tempo real desde que o jogo começou. Este menu de pausa gira sua roda de carregamento usando o tempo real, então ela continua girando enquanto o jogo está pausado:
void Update()
{
wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime); // meia volta por segundo, esteja pausado ou não
}As corrotinas têm o mesmo par. WaitForSeconds conta o tempo de jogo, então, com Time.timeScale = 0, nunca termina; WaitForSecondsRealtime conta segundos reais. Iniciada quando o menu é aberto, esta corrotina pisca o título do menu a cada meio segundo:
IEnumerator Blink()
{
while (true)
{
title.SetActive(!title.activeSelf);
yield return new WaitForSecondsRealtime(0.5f);
}
}Use os valores escalados para a jogabilidade, que deve parar quando o jogo parar, e os não escalados para o que precisa continuar funcionando enquanto o jogo está pausado ou em câmera lenta: menus, suas animações e temporizadores que encerram uma pausa. Invoke não tem uma versão de tempo real: sempre conta o tempo de jogo.
Desafio
MédioUm hit stop faz um golpe pesado parecer pesado: o jogo inteiro congela por um momento no impacto. As setas movem o lançador e a barra de espaço solta uma bigorna dele (Dropper.cs, pronto). Escreva Anvil.cs, que cada bigorna carrega:
- Quando a bigorna atinge qualquer coisa, congele o jogo:
Time.timeScale0. - Após
freezeTimesegundos reais (0.3 no Inspector), defina-o novamente como 1.
Pressione Play, solte algumas bigornas e então Check.
Experimente você mesmo
using System.Collections;
using UnityEngine;
public class Anvil : MonoBehaviour
{
public float freezeTime = 0.3f;
// Congele o jogo por freezeTime segundos reais quando a bigorna atingir alguma coisa
}
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