За исключением, пожалуй, самых маленьких игр, большинству игр потребуется какой-то менеджер игр для обработки данных, которые влияют на игру в нескольких местах. Здесь я создам один из моих собственных.
Сегодняшняя цель: создать Game Manager для управления игровыми данными и функциями, которые используются несколькими частями игры.
Дизайн:
Игровые менеджеры обычно создаются с использованием шаблона проектирования Singleton, так как обычно существует только один из них, и это позволяет получить к ним доступ практически из любого места. Я тоже буду использовать эту схему.
В моем случае класс Game Manager будет управлять функциями Pause/Restart/Quit игрового процесса, а также важным логическим значением прогресса игры.
Код:
Общий метод (существует множество вариаций) для создания синглтона таков:
Этот компонент класса будет размещен на GameObject в игровой сцене. Обычно это собственный GameObject, возможно называемый «Game Manager».
Чтобы он делал то, что мне нужно, мне нужно добавить еще несколько переменных и методов:
Теперь к методам этого менеджера можно получить доступ и вызвать их из любого класса в сцене.
Вы, возможно, заметили, что раздел управления звуком этого менеджера на самом деле выполняется в другом классе, AudioManager.
В отличие от GameManager, AudioManager не является синглтоном. Это был выбор, который я сделал, потому что хотел получить доступ ко всем другим менеджерам через GameManager, например:
Я чувствовал, что это была более приятная реализация. Доступ к нему можно получить только через GameManager (или, конечно, GetComponent).