TGViewer
aks2dio | Unity и геймдев aks2dio | Unity и геймдев @aks2dio · 492 subscribers
Post #104 530
🚀 Реактивное программирование 🚀
Уровень материала: 🐥 #middle

О реактивном программировании довольно часто упоминается, особенно в чрезмерно динамичном геймдеве. Подход очень легко начать использовать, и на первый взгляд он может показаться очень понятным. Поэтому многие новички любят брать его на вооружение и «прокачивать» свой код повсеместно. Но всё не так просто.

Я встретил хорошее видео, которое доступно поясняет устройство этой технологии. И подготовил несколько тезисов по теме.

📺 YouTube / 📝 Dzen


📌 🔤🔤🔤 🔤🔤🔤🔤🔤 🔤🔤🔤

Реактивное программирование — это парадигма, где код строится вокруг потоков данных* и их изменений. Вместо ручного обновления состояний мы подписываемся на события (например, нажатие кнопки, изменение здоровья персонажа) и реагируем на них.
* речь про data streams, не путать с thread из многопоточности

Ключевое отличие от обычных событий — это то, что здесь данные образуют поток (Observable), с которым можно взаимодействовать. Например, объединить несколько источников событий и реагировать не на все их события, а только, скажем, на первые N чётных событий, где есть данные X.

🔥 🔤🔤🔤🔤🔤:

1️⃣ Декларативность: Поток данных позволяет использовать цепочки операторов, которые помогают организовывать логику декларативно (например, через LINQ).

2️⃣ Отписки: Все локальные подписки на поток агрегируются в IDisposable-сущность. Соответственно для отписки нужно всего лишь вызвать Dispose и не хранить делегаты, которыми производилась подписка, чтобы ими же потом отписаться.

3️⃣ Удобство: Библиотеки имеют много вспомогательных методов и специальных оберток для данных, которые позволяют быстро добавить возможность подписки на изменения.

⚠️ 🔤🔤🔤🔤🔤🔤:

1️⃣ Оверкилл: Избыточное решение для простых единичных событий или асинхронных операций, с которыми нет необходимости работать как с потоком данных.

2️⃣ Отладка: Цепочки операторов и иерархию подписок сложно дебажить.

3️⃣ Производительность: Зависит от применяемого решения, но Rx имеет свои накладные расходы, пусть и не всегда значительные.

4️⃣ Сериализация: Реактивные обёртки для данных могут доставлять неудобства при сериализации данных и передаче по сети.

🛠 🔤🔤🔤🔤🔤🔤🔤 🔤 🔤🔤🔤🔤🔤:

В Unity долгое время использовался пакет UniRx, но теперь его активно замещает R3 от тех же авторов, которые подарили нам и UniTask.

Особенности последнего:

➖ Не ограничивается Unity и поддерживает другие движки.

➖ Улучшенная производительность и меньше аллокаций.

➖ Поддержка «покадровых» операций в игровых движках.

➖ Полноценная поддержка async/await операций «из коробки».

➖ Улучшен контроль за утечками памяти.

🧑‍💻 🔤🔤 🔤🔤🔤🔤:

В «юные годы» меня сильно привлекла декларативность, которую даёт Rx. Но, пережив несколько игровых проектов на этой технологии и попробовав разнообразные сценарии, все обозначенные минусы сильно перевесили плюсы. Поэтому вывод, к которому я пришёл, — этого должно быть так же в меру, как и всего остального.

Rx, как, например, не менее популярный Zenject (именно он, не DI в целом), дают слишком широкий простор возможностей и сценариев использования. Это в будущем создаёт разнообразные проблемы и сложности, разрешить которые может оказаться намного сложнее, чем не поддаваться искушению изначально.

Я бы рекомендовал сначала обкатать технологию на пет-проектах всеми возможными способами, прощупать свои личные границы удобства и изучить долгосрочные последствия принятых решений.

А вне «песочницы»: если нормально живётся без Rx — скорее всего, он не нужен. Rx — это, в первую очередь, про потоки данных. Где работа с такими потоками не нужна, запрягать Rx и нет необходимости.

🔧 🔤🔤🔤🔤🔤🔤 🔤🔤🔤🔤🔤:

➖ Необходимость объединения и/или фильтрации событий от разных источников.

➖ Сложная обработка событий.

➖ Обработка ввода от игрока.

➖ Связь визуального слоя с игровыми данными.

➖ Контроль событий, распределённых во времени (таймеры, задержки и пр.).
————————————
#unity #gamedev #development #architecture #rx #геймдев #разработка #архитектура #реактивность #рекомендация #видео
  • 🔥 7
  • 👍 6
More from @aks2dio
  1. Sep 28, 2026Обновление UniText v3 Уровень материала: 📢 #news #tool В этом месяце состоялся релиз ново…
  2. Sep 2, 2026Content Directories в Unity 6.6: закат Asset Bundles Уровень материала: 📢 #news #tool Uni…
  3. Jul 21, 2026😎 Unity CLI & Pipeline 😎 Уровень материала: 📢 #news #tool Действительно стоящая внимани…
  4. May 30, 2026Инструменты для экстремальной разработки Уровень материала: ☕️ опять #ai и #offtop В этом…
  5. Apr 25, 2026Обновление, которое вы тоже могли пропустить Под сильно возросшей нагрузкой немного выпал…
  6. Apr 5, 2026Большое обновление текстового движка UniText Уровень материала: 📎 #tool #news Пару месяце…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →