Главные игровые менеджеры. Управляем состояниями игры, настройками звука и графики
Всем привет! Сегодня я продолжаю цикл статей по разбору различных подходов в разработке игр на примерах. Сегодня хотел бы рассказать о возможных реализациях менеджеров для управления состояниями игры, а также настройками аудио и графики.
Итак, поехали.
Классы ядра. Работа с файловой системой и шифрованием.
Для начала создадим классы, которые помогут нам работать с файловой системой, а также шифровать наши данные. В дальнейшем с их помощью мы сможем сохранять наши игровые состояния.
Классы шифрования
Начнем с классов шифрования, к примеру Base64.cs:
Класс MD5.cs:
Класс RSA.cs:
Класс SHA.cs:
Класс AES.cs:
Классы для работы с файловой системой
Enum для Serialization Type:
Класс для работы с файлами и сериализацией FileReader.cs:
Базовый игровой менеджер
Далее мы создадим класс, который будет управлять глобальным состоянием нашей игры. Он позволит нам реализовать сохранения в игре.
Начнем с IGameManager - общего интерфейса для всех менеджеров:
Теперь добавим интерфейс для наших игровых состояний:
И, наконец, перейдем к классу GameManager.cs:
Теперь можно создать наш класс для хранения игровых состояний:
Здесь мы задали следующие параметры:
- IsFirstLaunch - Запускается ли игра в первый раз;
- DefaultCurrency - Обычная валюта;
- VIPCurrency - VIP-валюта;
- CurrentLevel - Текущий уровень, на котором мы остановились;
- CurrentLevelProgress - Прогресс на уровне, на котором мы остановились.
Для инициализации менеджера используем:
Далее мы можем взаимодействовать с менеджером следующим образом:
Аудио-менеджер. Работа с настройками звука
Теперь мы реализуем наш менеджер для настроек звука.
Для начала добавим Enum, позволяющий определять тип AudioSource:
Теперь создадим класс конфигураций для работы с аудио:
И реализуем наш аудио-менеджер:
Дополнительно, создадим компонент AudioSourceManager, который будет управлять нашим компонентом AudioSource:
И теперь можем инициализировать его и работать также, как с GameManager:
Работа с графическими настройками
Здесь мы не будем расписывать глубокие настройки графики, а лишь создадим обычный менеджер для сохранения состояний QualityLevel.
Создадим класс конфигураций для нашего менеджера:
И реализуем наш менеджер:
И его также можно использовать, как и другие менеджеры:
Примечания
Вы можете использовать вместо UnityEvent более простые и быстрые конструкции. Здесь это показано для примера и используется в других целях.
Для менеджеров не обязательно использовать синглтон. Здесь это показано для примера.
Итого
Таким образом мы рассмотрели один из примеров реализации игровых менеджеров. С их помощью можно управлять глобальными состояниями игры, настройками графики, локализации, аудио и др.
Данная реализация менеджеров - лишь пример для быстрого прототипирования.
Надеюсь, для вас это было полезно и буду рад ответить на ваши вопросы.