Menu
CoddyTech

Conserva la partita migliore

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 60 di 64.

Arena Survivor è completo: un Enemy astratto con due tipi, IDamageable per ogni colpo, ondate da un ScriptableObject, oggetti da raccogliere dietro un'interfaccia, un HUD che si limita ad ascoltare e, infine, un salvataggio JSON della migliore partita.

challenge icon

Sfida

Medio

Conserva il miglior risultato in best.json.

  1. In GameManager.cs, aggiungi una classe BestRun con l'attributo [System.Serializable] e i campi int pubblici wave e kills.
  2. Start lo carica da best.json in Application.persistentDataPath con JsonUtility, se il file esiste.
  3. Alla fine della partita, se la wave è più alta o se è la stessa wave con più uccisioni, il risultato diventa il migliore e viene salvato; bestText mostra Best: wave 3, 12 kills.

Premi Play e muori due volte: il miglior risultato resta invariato. Poi premi Check.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity