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.
Aufgabe
MittelSpeichere den besten Lauf in best.json.
- Füge in
GameManager.cseine KlasseBestRunmit dem Attribut[System.Serializable]und den öffentlichen Ganzzahlvariablenwaveundkillshinzu. Startlädt sie mitJsonUtilityausbest.jsoninApplication.persistentDataPath, falls die Datei existiert.- Bei Spielende wird eine höhere Welle oder dieselbe Welle mit mehr Abschüssen zum besten Ergebnis und gespeichert;
bestTextzeigtBest: wave 3, 12 killsan.
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);
}
}
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
1Komponenten statt Hierarchien
Kleine KomponentenEin Basis-GegnerskriptAbstrakte KomponentenZusammenwirkende KomponentenRückblick: Modulares GeschützRückblick: Zwillingskanone4Serialisierte Daten
Serialisierbare KlassenListen im InspectorEnums im InspectorRückblick: Loot-TabelleRückblick: Beute auswürfeln7Zustandsautomaten
Zustände als KlassenDer AlarmzustandEin ZustandsautomatÜbergängeGegner-KIDer Ritter greift anRückblick: Türzustände10Projekt: Überleben in der Arena
Der HeldGegnertypen2Schnittstellen in Unity
IDamageableSchnittstellen und TryGetComponentGetComponentsZusammenfassung: InteraktionstasteZusammenfassung: Nächstes in Reichweite5ScriptableObjects
Daten-AssetsWaffenwerteGemeinsame EinstellungenDen Wind speichernWellen als DatenRückblick: Item-DatenbankRückblick: Im Shop einkaufen8Wiederverwendbarer Code
ErweiterungsmethodenEin generisches SingletonGenerische HilfsmethodenRückblick: FindNearestÜbe selbstständig: Unity-Playground