Menu
CoddyTech

Behalte den besten Durchlauf

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 60 von 64.

Arena Survivor ist abgeschlossen: ein abstrakter Enemy mit zwei Arten, IDamageable für jeden Treffer, Wellen aus einem ScriptableObject, Aufsammelobjekte hinter einer Schnittstelle, ein HUD, das nur zuhört, und schließlich ein JSON-Speicherstand des besten Durchlaufs.

challenge icon

Aufgabe

Mittel

Speichere den besten Lauf in best.json.

  1. Füge in GameManager.cs eine Klasse BestRun mit dem Attribut [System.Serializable] und den öffentlichen Ganzzahlvariablen wave und kills hinzu.
  2. Start lädt sie mit JsonUtility aus best.json in Application.persistentDataPath, falls die Datei existiert.
  3. Bei Spielende wird eine höhere Welle oder dieselbe Welle mit mehr Abschüssen zum besten Ergebnis und gespeichert; bestText zeigt Best: wave 3, 12 kills an.

Drücke auf „Spielen“ und lass dich zweimal besiegen: Das beste Ergebnis bleibt erhalten. Drücke dann auf „Prüfen“.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spielarchitektur in Unity

Übe selbstständig: Unity-Playground