Игра Parrot использует подсистемы в Unreal Engine. Подсистемы позволяют задействовать возможности движка для управления временем жизни, а также добавления точек расширения для часто используемых функций. Если вы уже использовали паттерн Singleton в Unity, то заметите, что подсистемы используются в похожих целях. Подсистемы в движке напрямую связаны со следующими областями видимости:
движок;
редактор;
экземпляр игры;
мир;
локальный игрок.
Когда эти области видимости переходят в различные состояния, подсистемы тоже могут на это реагировать.
Подсистемы часто используются, когда в схему Blueprint нужно вывести элементы C++ с заранее известным временем жизни.
Пример звуковой подсистемы
Звуковая подсистема используется в игре Parrot по следующим причинам:
подсистема привязана ко времени жизни экземпляра игры без нахождения на самом экземпляре;
подсистема доступна как в C++, так и в схемах Blueprint;
настройки звука, например громкость, можно изменить в любой момент из любой точки игры;
управление настройками звука через подсистему обеспечивает централизованную точку доступа для отладки;
настройки звука можно сохранить в любой момент любой внешней системой.
Ознакомиться с тем, как это работает на практике, можно на примере UParrotAudioSubsystem. Звуковая подсистема преимущественно взаимодействует с системами интерфейса, так как именно через них выполняется управление звуком. При этом также предусмотрены необходимые возможности, если звук потребуется изменить в другом месте. Всякий раз, когда вы добавляете в свою игру какую-либо систему, подумайте, будет ли подсистема полезным средством.