Menu
CoddyTech

Reiniciar el nivel

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 18 de 56.

La forma más rápida de reiniciar un nivel es volver a cargarlo. SceneManager.GetActiveScene() devuelve la escena que está abierta ahora, y su name (o su buildIndex) es lo que recibe LoadScene. Este botón Restart de un panel de fin de partida llama a:

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unity destruye la escena abierta y la vuelve a crear a partir del archivo de escena. Cada objeto vuelve a estar donde lo colocó la escena, incluida una caja que el jugador haya volcado; cada campo vuelve a tener su valor del Inspector, y Awake y Start se ejecutan de nuevo. No hace falta que ningún código restablezca las cosas una por una. Como el botón solicita la escena activa en vez de un nombre como "Level3", el mismo script reinicia cualquier nivel en el que se coloque.

Un campo static no forma parte de la escena: pertenece a la clase, así que una recarga lo deja tal como estaba. Un private static float bestTime; conserva el mejor tiempo entre reinicios, mientras que un private float time; normal vuelve a empezar desde 0 con la nueva escena. GameManager.Instance también es static: después de una recarga, apunta al GameManager destruido hasta que el Awake del nuevo lo establece.

challenge icon

Desafío

Fácil

Dos niveles, Level1 y Level2, cada uno con un objeto Level que contiene el script LevelRestart. Las flechas mueven al jugador y el bloque dorado de Level1 carga Level2 (ambos están listos). Termina LevelRestart.cs:

  • Cuando el jugador cae por debajo de fallY (-3), suma 1 a falls y reinicia el nivel en el que está el jugador: una caída en Level2 reinicia Level2.
  • falls cuenta todas las caídas del juego, así que debe conservarse después de volver a cargar el nivel. Start ya lo muestra como Falls: 1.

Pulsa Play, salta por un borde en ambos niveles y luego pulsa Check.

Pruébalo tú mismo

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()
    {
        // por debajo de fallY: cuenta la caída y reinicia el nivel en el que está el jugador
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales