En İyi Oyununu Kaydet
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 60 / 64.
Arena Survivor tamamlandı: iki türü olan soyut bir Enemy, her isabet için IDamageable, bir ScriptableObject'ten gelen dalgalar, bir arayüzün arkasındaki toplanabilir nesneler, yalnızca dinleyen bir HUD ve son olarak en iyi koşunun JSON kaydı.
Görev
OrtaEn iyi koşuyu best.json dosyasında sakla.
GameManager.csdosyasında,wavevekillsadlı public int alanlarına sahip[System.Serializable]birBestRunsınıfı ekle.- Dosya varsa
Start,JsonUtilitykullanarakApplication.persistentDataPathkonumundakibest.jsondosyasından verileri yükler. - Oyun sona erdiğinde daha yüksek bir dalga ya da aynı dalgada daha fazla öldürme sayısı yeni en iyi sonuç olur ve kaydedilir;
bestText,Best: wave 3, 12 killsdeğerini gösterir.
“Oyna” düğmesine bas ve iki kez yenil: en iyi sonuç değişmeden kalır. Ardından “Kontrol et” düğmesine bas.
Kendin dene
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);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At7Durum Makineleri
Sınıflar Olarak DurumlarAlarm DurumuBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıŞövalye SaldırıyorÖzet: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground