Столкновение и перезапуск
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 31 из 56.
Задание
СреднеСтолкновение завершает забег, а кнопка запускает следующий. Сохрани всё из предыдущих уроков. На холсте есть скрытая панель GameOverPanel с кнопкой RestartButton с надписью «Запустить снова», а сцена заполняет два новых поля GameManager: gameOverPanel и restartButton. У Runner есть кинематическое тело Rigidbody, поэтому он получает сообщения о триггерах от препятствий.
В GameManager:
- Над классом объяви
public enum GameState { Playing, GameOver }, а в классе добавь полеpublic GameState state, начальное значение которого —Playing. - Добавь
using UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;иpublic Button restartButton;. - Публичный метод
GameOver()задаёт дляstateзначениеGameOver, задаёт дляspeedзначение 0, останавливая все препятствия, и показывает панель. Update()ничего не делает, если состояние неPlaying, поэтому скорость и расстояние перестают изменяться.- В
Start()настройrestartButtonтак, чтобы он перезагружал текущую сцену.
В Runner: когда он входит в триггер с тегом Obstacle, вызови GameManager.Instance.GameOver(). Пока состояние не Playing, стрелки не работают.
В Spawner: не создавай препятствия, пока состояние не Playing.
Нажми Play, столкнись с препятствием и запусти игру снова, затем нажми Check.
Попробуйте сами
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public float speed = 10f;
public float speedUp = 0.5f;
public float maxSpeed = 20f;
public TMP_Text distanceText;
private float distance;
void Awake()
{
Instance = this;
}
void Update()
{
speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
distance += speed * Time.deltaTime;
distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке3Менеджер игры
Один скрипт управляет игройОдиночкаСостояния игрыПереключение состоянияПовторение: менеджер раундов6Проект: бесконечный раннер
Три полосыПрепятствия впереди