Menu
CoddyTech

Uruchom poziom ponownie

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 18 z 56.

Najszybszym sposobem na zresetowanie poziomu jest ponowne jego wczytanie. SceneManager.GetActiveScene() zwraca scenę, która jest teraz otwarta, a jej name (lub buildIndex) to wartość, którą przyjmuje LoadScene. Ten przycisk Restart na panelu końca gry wywołuje:

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

Unity niszczy otwartą scenę i odtwarza ją z pliku sceny. Każdy obiekt wraca na miejsce, w którym umieściła go scena, w tym skrzynia przewrócona przez gracza; każde pole ponownie przyjmuje wartość z Inspektora, a Awake i Start uruchamiają się ponownie. Żaden kod nie musi przywracać obiektów pojedynczo. Ponieważ przycisk pobiera aktywną scenę zamiast nazwy takiej jak "Level3", ten sam skrypt uruchamia ponownie każdy poziom, na którym został umieszczony.

Pole static nie jest częścią sceny: należy do klasy, więc po ponownym wczytaniu zachowuje swoją wartość. private static float bestTime; przechowuje najlepszy czas pomiędzy restartami, podczas gdy zwykłe private float time; zaczyna od 0 wraz z nową sceną. GameManager.Instance również jest statyczne: po ponownym wczytaniu wskazuje na zniszczony GameManager, dopóki Awake nowego obiektu go nie ustawi.

challenge icon

Wyzwanie

Łatwy

Dwa poziomy, Level1 i Level2, każdy z obiektem Level zawierającym skrypt LevelRestart. Strzałki poruszają graczem, a złoty blok na poziomie Level1 ładuje Level2 (oba poziomy są gotowe). Dokończ LevelRestart.cs:

  • Gdy gracz spadnie poniżej fallY (-3), zwiększ falls o 1 i uruchom ponownie poziom, na którym znajduje się gracz: upadek na poziomie Level2 powoduje ponowne uruchomienie poziomu Level2.
  • falls zlicza każdy upadek w grze, więc jego wartość musi przetrwać ponowne wczytanie. Start już ją wyświetla jako Falls: 1.

Naciśnij Play, zejdź z krawędzi na obu poziomach, a następnie naciśnij Check.

Spróbuj swoich sił

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()
    {
        // poniżej fallY: zlicz upadek i uruchom ponownie poziom, na którym znajduje się gracz
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier