Menu
CoddyTech

Uruchom poziom ponownie

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

Najszybszym sposobem na zresetowanie poziomu jest ponowne jego wczytanie. SceneManager.GetActiveScene() zwraca scenę, która jest teraz otwarta, a jej name (lub buildIndex) to argument przyjmowany przez LoadScene. Przycisk „Restart” na panelu końca gry wywołuje:

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

Unity niszczy otwartą scenę i tworzy ją ponownie z pliku sceny. Każdy obiekt wraca na swoje miejsce ze sceny, w tym skrzynia przewrócona przez gracza, każde pole znów ma wartość z Inspektora, a Awake i Start uruchamiają się ponownie. Żaden kod nie musi przywracać elementów jeden po drugim. Ponieważ przycisk pobiera aktywną scenę zamiast nazwy takiej jak "Level3", ten sam skrypt restartuje każdy poziom, w którym zostanie umieszczony.

Pole static nie jest częścią sceny: należy do klasy, więc ponowne wczytanie nie zmienia jego wartości. Pole private static float bestTime; przechowuje najlepszy czas między restartami, a zwykłe pole 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

Upadek powinien restartować poziom, w którym znajduje się gracz, i zwiększać licznik upadków.

  1. Dodaj using UnityEngine.SceneManagement; i zmień licznik na private static int falls;, aby zachował wartość po ponownym wczytaniu.
  2. W Update(), gdy player.position.y < fallY, wykonaj falls++; i wczytaj SceneManager.GetActiveScene().name.

Naciśnij „Graj” i zeskocz z krawędzi na obu poziomach: Falls: 1, a następnie Falls: 2. Potem naciśnij „Sprawdź”.

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
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity