Menu
CoddyTech

Сохраняем лучший забег

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 60 из 64.

Arena Survivor завершена: абстрактный Enemy с двумя типами, IDamageable для каждого попадания, волны из ScriptableObject, подбор предметов через интерфейс, HUD, который только слушает, и, наконец, сохранение лучшего забега в JSON.

challenge icon

Задание

Средне

Сохраняй лучший результат в best.json.

  1. В GameManager.cs добавь класс [System.Serializable] BestRun с публичными целыми числами wave и kills.
  2. Start загружает его из best.json в Application.persistentDataPath с помощью JsonUtility, если файл существует.
  3. При завершении игры лучший результат обновляется и сохраняется, если волна выше или если волна та же, но убийств больше; bestText выводит Best: wave 3, 12 kills.

Нажми «Играть» и погибни дважды: лучший результат сохранится. Затем нажми «Проверить».

Попробуйте сами

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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Архитектура игр в Unity

Потренируйтесь самостоятельно: Песочница Unity