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

Сегодняшняя цель: создать Game Manager для управления игровыми данными и функциями, которые используются несколькими частями игры.

Дизайн:

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

В моем случае класс Game Manager будет управлять функциями Pause/Restart/Quit игрового процесса, а также важным логическим значением прогресса игры.

Код:

Общий метод (существует множество вариаций) для создания синглтона таков:

Этот компонент класса будет размещен на GameObject в игровой сцене. Обычно это собственный GameObject, возможно называемый «Game Manager».

Чтобы он делал то, что мне нужно, мне нужно добавить еще несколько переменных и методов:

Теперь к методам этого менеджера можно получить доступ и вызвать их из любого класса в сцене.

Вы, возможно, заметили, что раздел управления звуком этого менеджера на самом деле выполняется в другом классе, AudioManager.

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

Я чувствовал, что это была более приятная реализация. Доступ к нему можно получить только через GameManager (или, конечно, GetComponent).