Создание простого игрового менеджера в Unity
Game Manager в Unity — это центральный скрипт или система, которая контролирует и управляет основными механиками и логикой игры. Обычно он управляет игровыми состояниями (например, запуск, пауза, конец), прогрессом игрока, счетом, уровнями и глобальными настройками. Game Manager имеет решающее значение для обеспечения чистой структуры вашего проекта и избежания избыточного кода. В этом руководстве мы создадим базовый Game Manager для управления игровым состоянием и отслеживания счета.
Шаг 1: Подготовка сцены
Для начала подготовим простую сцену Unity:
- Создайте новый проект Unity 3D.
- Добавьте базовую схему уровня, например, Плоскость для земли и несколько объектов для элементов игрового процесса.
- Создайте UI Canvas для отображения информации, например счета.
Шаг 2: Создание скрипта Game Manager
Game Manager будет синглтоном, чтобы обеспечить легкий доступ к нему и существование только одного экземпляра на протяжении всей игры. Давайте напишем скрипт:
- Щелкните правой кнопкой мыши на панели Project и выберите Create > C# Script. Назовите его GameManager.
- Откройте скрипт в редакторе кода и замените его содержимое следующим:
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 на сцену:
- Создайте пустой GameObject в иерархии и назовите его GameManager.
- Перетащите скрипт GameManager на GameObject.
- Убедитесь, что на сцене нет дублирующихся объектов GameManager GameObject.
Шаг 4: Обновление логики игрового процесса
Давайте используем Game Manager для обработки взаимодействия с игроками. Например, мы изменим игровые объекты для взаимодействия с Game Manager:
- Создайте новый скрипт под названием Target для объектов, с которыми может взаимодействовать игрок.
- Используйте следующий код для целевого скрипта:
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: Отображение результата
Чтобы отобразить счет игроку:
- Создайте элемент пользовательского интерфейса Text на холсте и назовите его ScoreText.
- Создайте новый скрипт с именем ScoreUI и прикрепите его к Canvas.
- Используйте следующий код для обновления отображения результатов:
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:
- Запустите сцену и взаимодействуйте с объектами, использующими скрипт Target.
- Наблюдайте за обновлением счета в пользовательском интерфейсе по мере взаимодействия с целями.
- Вызовите метод EndGame (например, с помощью триггера или кнопки), чтобы протестировать завершение игры.
Дополнительные улучшения
Вы можете расширить функциональность Game Manager с помощью следующих функций:
- Управление уровнями: Загрузка новых уровней или сброс сцены при завершении игры.
- Игровой таймер: Добавьте таймер обратного отсчета, чтобы бросить вызов игрокам.
- Сохранение прогресса: Сохраняйте и извлекайте прогресс игрока с помощью PlayerPrefs или системы сохранения.
- Меню паузы: Реализуйте меню паузы, чтобы остановить игру и показать параметры.
Заключение
Мы создали простой Game Manager для управления состоянием игры и отслеживания очков в Unity. Game Manager централизует основную логику, делая ваш проект более организованным и масштабируемым. Экспериментируйте с дополнительными функциями, чтобы адаптировать Game Manager к потребностям вашей игры.