Создание простого игрового менеджера в Unity

Game Manager в Unity — это центральный скрипт или система, которая контролирует и управляет основными механиками и логикой игры. Обычно он управляет игровыми состояниями (например, запуск, пауза, конец), прогрессом игрока, счетом, уровнями и глобальными настройками. Game Manager имеет решающее значение для обеспечения чистой структуры вашего проекта и избежания избыточного кода. В этом руководстве мы создадим базовый Game Manager для управления игровым состоянием и отслеживания счета.

Шаг 1: Подготовка сцены

Для начала подготовим простую сцену Unity:

  1. Создайте новый проект Unity 3D.
  2. Добавьте базовую схему уровня, например, Плоскость для земли и несколько объектов для элементов игрового процесса.
  3. Создайте UI Canvas для отображения информации, например счета.

Шаг 2: Создание скрипта Game Manager

Game Manager будет синглтоном, чтобы обеспечить легкий доступ к нему и существование только одного экземпляра на протяжении всей игры. Давайте напишем скрипт:

  1. Щелкните правой кнопкой мыши на панели Project и выберите Create > C# Script. Назовите его GameManager.
  2. Откройте скрипт в редакторе кода и замените его содержимое следующим:
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // Singleton instance

    public int score = 0; // Player's score
    public bool isGameActive = true; // Is the game running?

    void Awake()
    {
        // Ensure there is only one instance of GameManager
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // Persist across scenes
        }
        else
        {
            Destroy(gameObject); // Destroy duplicate instances
        }
    }

    // Method to increase the score
    public void AddScore(int points)
    {
        if (isGameActive)
        {
            score += points;
            Debug.Log("Score: " + score);
        }
    }

    // Method to end the game
    public void EndGame()
    {
        isGameActive = false;
        Debug.Log("Game Over!");
        // Additional logic to handle game over, like displaying UI
    }
}

Шаг 3: Добавление Game Manager на сцену

Теперь добавим Game Manager на сцену:

  1. Создайте пустой GameObject в иерархии и назовите его GameManager.
  2. Перетащите скрипт GameManager на GameObject.
  3. Убедитесь, что на сцене нет дублирующихся объектов GameManager GameObject.

Шаг 4: Обновление логики игрового процесса

Давайте используем Game Manager для обработки взаимодействия с игроками. Например, мы изменим игровые объекты для взаимодействия с Game Manager:

  1. Создайте новый скрипт под названием Target для объектов, с которыми может взаимодействовать игрок.
  2. Используйте следующий код для целевого скрипта:
using UnityEngine;

public class Target : MonoBehaviour
{
    public int pointValue = 10; // Points awarded for interacting with this target

    void OnMouseDown()
    {
        if (GameManager.Instance.isGameActive)
        {
            // Add points to the score
            GameManager.Instance.AddScore(pointValue);

            // Destroy the target
            Destroy(gameObject);
        }
    }
}

Этот скрипт предполагает, что игрок взаимодействует с объектами, нажимая на них. Вы можете адаптировать его к механике вашей игры, например, к столкновениям или триггерам.

Шаг 5: Отображение результата

Чтобы отобразить счет игроку:

  1. Создайте элемент пользовательского интерфейса Text на холсте и назовите его ScoreText.
  2. Создайте новый скрипт с именем ScoreUI и прикрепите его к Canvas.
  3. Используйте следующий код для обновления отображения результатов:
using UnityEngine;
using UnityEngine.UI;

public class ScoreUI : MonoBehaviour
{
    public Text scoreText;

    void Update()
    {
        if (GameManager.Instance != null)
        {
            scoreText.text = "Score: " + GameManager.Instance.score;
        }
    }
}

Перетащите элемент пользовательского интерфейса ScoreText в поле ScoreText в Инспекторе.

Шаг 6: Тестирование Game Manager

Чтобы протестировать Game Manager:

  1. Запустите сцену и взаимодействуйте с объектами, использующими скрипт Target.
  2. Наблюдайте за обновлением счета в пользовательском интерфейсе по мере взаимодействия с целями.
  3. Вызовите метод EndGame (например, с помощью триггера или кнопки), чтобы протестировать завершение игры.

Дополнительные улучшения

Вы можете расширить функциональность Game Manager с помощью следующих функций:

  • Управление уровнями: Загрузка новых уровней или сброс сцены при завершении игры.
  • Игровой таймер: Добавьте таймер обратного отсчета, чтобы бросить вызов игрокам.
  • Сохранение прогресса: Сохраняйте и извлекайте прогресс игрока с помощью PlayerPrefs или системы сохранения.
  • Меню паузы: Реализуйте меню паузы, чтобы остановить игру и показать параметры.

Заключение

Мы создали простой Game Manager для управления состоянием игры и отслеживания очков в Unity. Game Manager централизует основную логику, делая ваш проект более организованным и масштабируемым. Экспериментируйте с дополнительными функциями, чтобы адаптировать Game Manager к потребностям вашей игры.