Reiniciar el nivel
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 18 de 60.
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 al lugar que le asignó la escena, incluida una caja que el jugador haya volcado; todos los campos recuperan sus valores del Inspector, y Awake y Start se ejecutan de nuevo. No hace falta que ningún código restaure las cosas una por una. Como el botón solicita la escena activa en lugar 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; 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.
Desafío
FácilUna caída debería reiniciar el nivel en el que está el jugador y contabilizar la caída.
- Añade
using UnityEngine.SceneManagement;y cambia el contador aprivate static int falls;para que se conserve al recargar el nivel. - En
Update(), cuandoplayer.position.y < fallY, ejecutafalls++;y cargaSceneManager.GetActiveScene().name.
Pulsa «Jugar» y salta por un borde en ambos niveles: Falls: 1, después Falls: 2. Después, pulsa «Comprobar».
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 se encuentra el jugador
}
}
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: Corredor sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity