Menu
CoddyTech

Zachowaj najlepszy wynik

Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 60 z 64.

Arena Survivor jest gotowe: abstrakcyjny Enemy z dwoma rodzajami, IDamageable dla każdego trafienia, fale z obiektu ScriptableObject, przedmioty do podniesienia obsługiwane przez interfejs, HUD, który tylko nasłuchuje, a na koniec zapis najlepszego przebiegu w formacie JSON.

challenge icon

Wyzwanie

Średni

Zachowaj najlepszy wynik w best.json.

  1. W pliku GameManager.cs dodaj klasę BestRun z atrybutem [System.Serializable] oraz publicznymi polami typu int: wave i kills.
  2. Metoda Start wczytuje dane z pliku best.json w lokalizacji Application.persistentDataPath za pomocą JsonUtility, jeśli plik istnieje.
  3. Po zakończeniu gry lepszy wynik — wyższa fala albo ta sama fala z większą liczbą zabójstw — staje się najlepszym i zostaje zapisany; bestText wyświetla Best: wave 3, 12 kills.

Naciśnij „Graj” i zgiń dwa razy: najlepszy wynik pozostanie bez zmian. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private Hero hero;
    [SerializeField] private WaveSpawner spawner;
    [SerializeField] private GameObject gameOverPanel;
    [SerializeField] private TMP_Text resultText;
    [SerializeField] private TMP_Text bestText;
    [SerializeField] private Button restartButton;

    private int kills;

    void OnEnable()
    {
        hero.Died += GameOver;
        Enemy.Died += CountKill;
    }

    void OnDisable()
    {
        hero.Died -= GameOver;
        Enemy.Died -= CountKill;
    }

    void Start()
    {
        gameOverPanel.SetActive(false);
        restartButton.onClick.AddListener(Restart);
    }

    void CountKill(Enemy enemy)
    {
        kills++;
    }

    void GameOver()
    {
        Time.timeScale = 0f;
        int wave = spawner.Wave;
        resultText.text = "Wave " + wave + ", " + kills + " kills";
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Architektura gier w Unity

Poćwicz samodzielnie: Edytor online Unity