Сохраняем лучший забег
Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 60 из 64.
Arena Survivor завершена: абстрактный Enemy с двумя типами, IDamageable для каждого попадания, волны из ScriptableObject, подбор предметов через интерфейс, HUD, который только слушает, и, наконец, сохранение лучшего забега в JSON.
Задание
СреднеСохраняй лучший результат в best.json.
- В
GameManager.csдобавь класс[System.Serializable]BestRunс публичными целыми числамиwaveиkills. Startзагружает его изbest.jsonвApplication.persistentDataPathс помощьюJsonUtility, если файл существует.- При завершении игры лучший результат обновляется и сохраняется, если волна выше или если волна та же, но убийств больше;
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);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Архитектура игр в Unity
1Компоненты, а не иерархии
Небольшие компонентыБазовый скрипт врагаАбстрактные компонентыКомпоненты работают вместеПовторение: модульная турельПовторение: спаренная пушка4Сериализованные данные
Сериализуемые классыСписки в инспектореПеречисления в инспектореПовторение: таблица добычиПовторение: определяем добычу7Машины состояний
Состояния как классыСостояние тревогиМашина состоянийПереходыЛогика враговРыцарь атакуетПовторение: состояния двери10Проект: Арена выживания
ГеройВиды врагов2Интерфейсы в Unity
IDamageableИнтерфейсы и TryGetComponentGetComponentsПовторение: клавиша взаимодействияПовторение: ближайший в пределах досягаемости5ScriptableObjects
Ресурсы данныхХарактеристики оружияОбщие настройкиСохраняем ветерВолны как данныеПовторение: база предметовПовторение: покупка в магазинеПотренируйтесь самостоятельно: Песочница Unity