Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Dois 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 a falls e reinicie o nível em que o jogador está: uma queda em Level2 reinicia Level2.
  • falls conta todas as quedas do jogo, então precisa sobreviver ao recarregamento. Start já o exibe como Falls: 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á
    }
}
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