Reiniciar a Fase
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 18 de 56.
A maneira mais rápida de reiniciar um nível é carregá-lo novamente. SceneManager.GetActiveScene() retorna a cena que está aberta agora, e o name (ou o buildIndex) dela é o que LoadScene recebe. Este botão Restart em um painel de fim de jogo chama:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}O Unity destrói a cena aberta e a reconstrói a partir do arquivo da cena. Cada objeto volta para onde a cena o colocou, incluindo uma caixa que o jogador derrubou; cada campo recebe novamente seu valor do Inspector, e Awake e Start são executados outra vez. Nenhum código precisa recolocar as coisas uma por uma. Como o botão solicita a cena ativa em vez de um nome como "Level3", o mesmo script reinicia qualquer nível em que for colocado.
Um campo static não faz parte da cena: ele pertence à classe, então um recarregamento o deixa como estava. Um private static float bestTime; mantém o melhor tempo entre reinicializações, enquanto um private float time; normal começa novamente em 0 com a nova cena. GameManager.Instance também é static: após um recarregamento, ele aponta para o GameManager destruído até que o Awake do novo GameManager o defina.
Desafio
FácilDois níveis, Level1 e Level2, cada um com um objeto Level contendo o script LevelRestart. As setas movem o Player, e o bloco dourado em Level1 carrega Level2 (ambos prontos). Conclua LevelRestart.cs:
- Quando o jogador cair abaixo de
fallY(-3), adicione 1 afallse reinicie o nível em que o jogador está: uma queda em Level2 reinicia Level2. fallsconta todas as quedas do jogo, então precisa sobreviver ao recarregamento. Start já o exibe comoFalls: 1.
Pressione Play, saia de uma borda nos dois níveis e depois Check.
Experimente você mesmo
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// abaixo de fallY: conte a queda e reinicie o nível em que o jogador está
}
}
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