Menu
CoddyTech

Riavviare il livello

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

Il modo più rapido per reimpostare 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 su un pannello di fine partita chiama:

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

Unity distrugge la scena aperta e la ricrea dal file della scena. Ogni oggetto torna dove lo aveva collocato la scena, compresa una cassa che il giocatore ha rovesciato, ogni campo riprende il proprio valore Inspector e Awake e Start vengono eseguiti di nuovo. Non serve alcun codice per ripristinare le cose una per una. Poiché il pulsante richiede la scena attiva invece di un nome come "Level3", lo stesso script riavvia qualsiasi livello in cui viene inserito.

Un campo static non fa parte della scena: appartiene alla classe, quindi un ricaricamento lo lascia com'era. Un private static float bestTime; conserva il tempo migliore tra i riavvii, 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

Due livelli, Level1 e Level2, ciascuno con un oggetto Level che contiene lo script LevelRestart. Le frecce muovono il Player e il blocco dorato in Level1 carica Level2 (entrambi pronti). Completa LevelRestart.cs:

  • Quando il giocatore cade sotto fallY (-3), aggiungi 1 a falls e riavvia il livello in cui si trova il giocatore: una caduta in Level2 riavvia Level2.
  • falls conta ogni caduta nel gioco, quindi deve sopravvivere al ricaricamento. All'avvio viene già mostrato, come Falls: 1.

Premi Play, cammina oltre un bordo in entrambi i livelli, poi premi Check.

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
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi