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.
Wyzwanie
ŚredniZachowaj najlepszy wynik w best.json.
- W pliku
GameManager.csdodaj klasęBestRunz atrybutem[System.Serializable]oraz publicznymi polami typu int:waveikills. - Metoda
Startwczytuje dane z plikubest.jsonw lokalizacjiApplication.persistentDataPathza pomocąJsonUtility, jeśli plik istnieje. - 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;
bestTextwyświetlaBest: 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);
}
}
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
1Komponenty, nie hierarchie
Małe komponentyBazowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPowtórka: modułowa wieżyczkaPowtórka: podwójne działo4Dane serializowane
Klasy serializowalneListy w InspectorzeEnumy w InspectorzePodsumowanie: tabela łupówPodsumowanie: losowanie łupów7Maszyny stanów
Stany jako klasyStan alarmowyMaszyna stanówPrzejściaMózgi przeciwnikówAtaki rycerzaPodsumowanie: stany drzwi10Projekt: Arena przetrwania
BohaterRodzaje wrogów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPowtórka: klawisz interakcjiPowtórka: najbliższy w zasięgu5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaOcal wiatrFale jako danePowtórka: Baza przedmiotówPowtórka: Kupowanie w sklepie8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearestPoćwicz samodzielnie: Edytor online Unity