Menu
CoddyTech

Reiniciar a Fase

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 18 de 60.

A maneira mais rápida de reiniciar uma fase é carregá-la novamente. SceneManager.GetActiveScene() retorna a cena que está aberta agora, e seu name (ou seu buildIndex) é o que LoadScene recebe. Este botão “Reiniciar” 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 recria a partir do arquivo da cena. Cada objeto volta ao lugar definido pela cena, inclusive uma caixa que o jogador derrubou; cada campo recebe novamente o valor do Inspector, e Awake e Start são executados de novo. 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 fase em que seja colocado.

Um campo static não faz parte da cena: ele pertence à classe, então uma recarga o deixa como estava. Um private static float bestTime; mantém o melhor tempo entre reinicializações, enquanto um private float time; recomeça em 0 com a nova cena. GameManager.Instance também é static: após uma recarga, ele aponta para o GameManager destruído até que o Awake do novo GameManager o defina.

challenge icon

Desafio

Fácil

Uma queda deve reiniciar a fase em que o jogador está e contar a queda.

  1. Adicione using UnityEngine.SceneManagement; e altere o contador para private static int falls;, para que ele seja mantido após o recarregamento.
  2. Em Update(), quando player.position.y < fallY, execute falls++; e carregue SceneManager.GetActiveScene().name.

Pressione “Jogar” e saia de uma plataforma pelas bordas nos dois níveis: Falls: 1, depois Falls: 2. Em seguida, clique em “Verificar”.

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 a fase em que o jogador está
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity