Menu
CoddyTech

Выживание

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

challenge icon

Задание

Средне

Последний шаг: забег заканчивается, а лучший результат сохраняется. Сохраните всё из предыдущих уроков. На Canvas есть скрытая панель GameOverPanel с элементами ResultText, BestText и RestartButton с надписью Fight again, а на объекте GameManager находится скрипт GameManager; в Inspector назначьте для него hero, spawner, gameOverPanel, resultText, bestText и restartButton.

  • Добавьте в Hero событие public event Action Died, которое вызывается, когда здоровье достигает 0, после того как герой отключает себя.
  • В GameManager.cs добавьте класс BestRun с атрибутом [System.Serializable] и полями public int wave и public int kills.
  • GameManager подписывается на Died героя и на Enemy.Died, чтобы подсчитывать убийства за этот забег: подпишитесь в OnEnable, отпишитесь в OnDisable. В Start он загружает лучший результат с помощью JsonUtility из файла best.json в Application.persistentDataPath, если этот файл существует, скрывает панель и настраивает restartButton для перезапуска игры.
  • Когда герой погибает, остановите игру (Time.timeScale 0). Результат забега — это значение Wave у спавнера и количество убийств. Новый лучший результат получается, если достигнута более высокая волна или та же волна с большим количеством убийств: тогда он становится лучшим и сохраняется в best.json с помощью JsonUtility.ToJson. Покажите результат забега в resultText в виде Wave 2, 7 kills, а лучший результат — в bestText в виде Best: wave 3, 12 kills, затем покажите панель.
  • При перезапуске верните временной масштаб к 1 и загрузите сцену заново.

Нажмите Play и сражайтесь, пока не погибнете, затем попробуйте побить свой рекорд. После этого нажмите Check.

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

using UnityEngine;

public class GameManager : MonoBehaviour
{
    // В одном из следующих уроков здесь будет добавлена логика завершения забега и учёта лучшего результата.
}

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