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.
Sfida
MedioConserva il miglior risultato in best.json.
- In
GameManager.cs, aggiungi una classeBestRuncon l'attributo[System.Serializable]e i campi int pubbliciwaveekills. Startlo carica dabest.jsoninApplication.persistentDataPathconJsonUtility, se il file esiste.- 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;
bestTextmostraBest: 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);
}
}
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
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRipasso: torretta modulareRipasso: cannone doppio4Dati serializzati
Classi serializzabiliElenchi nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottinoRiepilogo: tira il bottino7Macchine a stati
Gli stati come classiLo stato di allertaUna macchina a statiTransizioniIntelligenza dei nemiciIl cavaliere attaccaRiepilogo: stati delle porte10Progetto: Sopravvissuto nell'arena
L'eroeTipi di nemici2Interfacce in Unity
IDamageableInterfacce e TryGetComponentGetComponentsRiepilogo: tasto InteragisciRiepilogo: il più vicino a portata5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseSalva il ventoOnde come datiRiepilogo: database degli oggettiRiepilogo: comprare dal negozioEsercitati da solo: Playground Unity