Menu
CoddyTech

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ı.

challenge icon

Görev

Orta

En iyi koşuyu best.json dosyasında sakla.

  1. GameManager.cs dosyasında, wave ve kills adlı public int alanlarına sahip [System.Serializable] bir BestRun sınıfı ekle.
  2. Dosya varsa Start, JsonUtility kullanarak Application.persistentDataPath konumundaki best.json dosyasından verileri yükler.
  3. 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 kills değ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);
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Unity playground