Реактивные системы в ECS
Реактивные системы - это системы, способные реагировать на изменения в фильтрах и обрабатывать эти изменения один раз после их возникновения. Реактивность реализована в Entitas
-фреймворке, но не в новом встроенном Unity
-ECS. Стоит вообще ее использовать?
Возможно, в каких-то случаях такое поведение и может быть полезным, но для меня - нет. После нескольких месяцев разработки проекта на моем ECS фреймворке я считаю, что проще использовать чистые Run
-системы и правильно расставлять порядок их обработки, чем использовать магию реактивности:
- Это быстрее - нет необходимости делать проверки на уникальность события для обработки его только один раз.
- Это уменьшает потребление памяти - нет необходимости хранить локальный список событий в каждой реактивной системе.
- 2 типа реакции (отложенная / мгновенная) - это не всегда очевидно для пользователя.
По соображениям производительности я решил вообще не использовать реактивность в моих проектах, но сохранил этот функционал, сделав его опциональным через директиву препроцессора:
1 | LEOECS_DISABLE_REACTIVE |
При ее использовании вырезается вся поддержка реактивности, размер билда становится немного меньше, а так же немного повышается производительность.