Unity: Меню Старта и Проигрыша (Урок 5)

Этот урок посвящен созданию меню старта и проигрыша для игры.

Создание меню старта

Для создания меню старта в Unity создайте Canvas и добавьте на него элементы интерфейса.

  1. Создание Canvas: Создайте объект Canvas. Прикрепите его к основной камере, установив расстояние до камеры равным 1. Это обеспечит расположение Canvas перед камерой.
  2. Добавление логотипа: Добавьте объект Legacy Text и переименуйте его в «Logo» или название вашей игры. Задайте текст (например, «Car Parking»), размер шрифта 150, жирный стиль и центрированное выравнивание (по горизонтали и вертикали). Добавьте компонент Outline с белым цветом текста и непрозрачной обводкой размером 10 пикселей.
  3. Добавление кнопки «Start Game»: Создайте кнопку. Загрузите изображение для кнопки (Sprite) и поместите его в папку «Sprites» проекта. Убедитесь, что изображение имеет тип Sprite/UI, режим Single и примените необходимые настройки. Перетащите изображение на компонент Image кнопки. Растяните якоря кнопки для корректного масштабирования. Используйте параметр «Preserve Aspect», чтобы избежать искажения изображения.

Скрипт для запуска игры (StartGame.cs)

Создайте скрипт StartGame.cs для обработки нажатия кнопки «Start Game» и запуска игры.

using UnityEngine;
using UnityEngine.UI; // Добавлено для использования Text

public class StartGame : MonoBehaviour
{
    public static bool isGameStarted = false;
    public GameObject Logo;
    public GameObject PlayImage;
    public Text CountMoves; // Добавлено для доступа к тексту ходов
    public Text LoseText; // Добавлено для доступа к тексту поражения
    private bool isLoseGame = false;

    public void PlayGame()
    {
        isGameStarted = true;
        Logo.SetActive(false);
        PlayImage.SetActive(false);
        CountMoves.gameObject.SetActive(true);
    }

    public void LoseGame()
    {
        isLoseGame = true;
        Logo.SetActive(true);
        PlayImage.SetActive(true);
        CountMoves.gameObject.SetActive(false);
        LoseText.gameObject.SetActive(true);
    }
}

Добавьте этот скрипт к кнопке «Start Game» и установите ссылки на объекты «Logo», «PlayImage», «CountMoves» и «LoseText» в инспекторе. Добавьте обработчик события OnClick для кнопки, вызывая функцию PlayGame() из скрипта StartGame.

Модификация скрипта CarController

В скрипте CarController добавьте проверку переменной isGameStarted для управления движением машинок. Добавьте проверку в функции OnMouseDown и OnMouseUp:

using UnityEngine;
using UnityEngine.UI;

public class CarController : MonoBehaviour
{
    // ... другие переменные ...
    public static int CountCars = 0; // Статическая переменная для подсчета машинок
    public Text CountMoves;
    public GameObject StartGameButton;
    private bool isClicked = false; // Переменная для предотвращения ложных срабатываний

    // ... другие функции ...

    void Awake()
    {
        CountCars++;
    }

    void OnMouseDown()
    {
        if (!StartGame.isGameStarted) return;
        // ... остальной код ...
        isClicked = true; // Устанавливаем флаг после начала движения
    }

    void OnMouseUp()
    {
        if (!StartGame.isGameStarted) return;
        // ... остальной код ...
        isClicked = false; // Сбрасываем флаг после окончания движения

        int currentMoves = int.Parse(CountMoves.text);
        CountMoves.text = (currentMoves - 1).ToString();
        if (int.Parse(CountMoves.text) == 0 && CountCars > 0 && !isClicked)
        {
            StartGameButton.GetComponent<StartGame>().LoseGame();
        }
    }
    // ... другие функции ...
}

В Unity установите ссылку на кнопку «Start Game» и на объект Text «CountMoves» в скрипте CarController.

Добавление объекта для отображения количества ходов и объекта поражения

Добавьте текстовый объект Moves для отображения количества ходов (изначально скрытый) и текстовый объект LoseText с сообщением «Вы проиграли» (изначально скрытый). Установите ссылки на эти объекты в скрипте StartGame.

Улучшение логики проигрыша и добавление проверки количества машинок

В скрипте CarController используется статическая переменная CountCars для отслеживания количества оставшихся машинок. В Awake() увеличивается CountCars, а в OnMouseUp уменьшается CountCars, когда машинка достигает финиша. Условие проигрыша включает проверку CountCars и состояния isClicked для предотвращения ложных срабатываний. Скорость машинок может быть увеличена в отдельной функции, не показанной в этом примере.

В этом уроке реализованы меню старта и система проигрыша, улучшена логика игры и добавлена проверка количества оставшихся машинок. Система выигрыша будет реализована в следующих уроках.

Что будем искать? Например,программа