Реактивные системы в Entity Component System

Реактивные системы - это системы, способные реагировать на изменения в фильтрах и обрабатывать эти изменения один раз после их возникновения. Реактивность реализована в Entitas-фреймворке, но не в новом встроенном Unity ECS. Стоит вообще ее использовать?

Возможно, в каких-то случаях такое поведение и может быть полезным, но для меня - нет. После нескольких месяцев разработки проекта на моем ECS фреймворке я считаю, что проще использовать чистые Run-системы и правильно расставлять порядок их обработки, чем использовать магию реактивности:

  • Это быстрее - нет необходимости делать проверки на уникальность события для обработки его только один раз.
  • Это уменьшает потребление памяти - нет необходимости хранить локальный список событий в каждой реактивной системе.
  • 2 типа реакции (отложенная / мгновенная) - это не всегда очевидно для пользователя.

По соображениям производительности я решил вообще не использовать реактивность в моих проектах, но сохранил этот функционал, сделав его опциональным через директиву препроцессора:

1
LEOECS_DISABLE_REACTIVE

При ее использовании вырезается вся поддержка реактивности, размер билда становится немного меньше, а так же немного повышается производительность.