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.
Sfida
FacileDue 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 afallse riavvia il livello in cui si trova il giocatore: una caduta in Level2 riavvia Level2. fallsconta ogni caduta nel gioco, quindi deve sopravvivere al ricaricamento. All'avvio viene già mostrato, comeFalls: 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
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input