Menu
CoddyTech

Riavviare il livello

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 18 di 60.

Il modo più rapido per ripristinare un livello è caricarlo di nuovo. SceneManager.GetActiveScene() restituisce la scena attualmente aperta, e il suo name (o il suo buildIndex) è ciò che LoadScene richiede. Questo pulsante Restart sul pannello di fine partita richiama:

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

Unity distrugge la scena aperta e la ricrea dal file della scena. Ogni oggetto torna al posto in cui la scena lo aveva messo, compresa una cassa rovesciata dal giocatore; ogni campo riacquista il proprio valore nell'Inspector e Awake e Start vengono eseguiti di nuovo. Non serve alcun codice per rimettere ogni cosa al suo posto una per una. Poiché il pulsante richiede la scena attiva invece di un nome come "Level3", lo stesso script riavvia qualsiasi livello in cui venga inserito.

Un campo static non fa parte della scena: appartiene alla classe, quindi un ricaricamento lo lascia invariato. Un private static float bestTime; conserva il tempo migliore tra un riavvio e l'altro, mentre un normale private float time; riparte da 0 con la nuova scena. Anche GameManager.Instance è statico: dopo un ricaricamento punta al GameManager distrutto finché l'Awake del nuovo GameManager non lo imposta.

challenge icon

Sfida

Facile

Una caduta dovrebbe riavviare il livello in cui si trova il giocatore e conteggiare la caduta.

  1. Aggiungi using UnityEngine.SceneManagement; e modifica il conteggio in private static int falls;, così verrà mantenuto al ricaricamento.
  2. In Update(), quando player.position.y < fallY, esegui falls++; e carica SceneManager.GetActiveScene().name.

Premi «Gioca» e cammina oltre il bordo in entrambi i livelli: Falls: 1, poi Falls: 2. Poi premi «Verifica».

Provalo tu

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()
    {
        // al di sotto di fallY: conta la caduta e riavvia il livello in cui si trova il giocatore
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity