Опробовал я и ООП, и ECS, и реактивное программирование. Как итог, давно уже использую последнее на постоянной основе. Сначала пользовался своим решением, а популярный UniRx не зацепил меня в своё время и я благополучно его пропустил. Затем я решил не вставать на путь скуфа и начал отстаивать свои зумерские права, пробуя что-то новое, в чём мне успешно помогла новая библиотека R3. Вот небольшой кусок кода из документации, демонстрирующий её мощь (обратите внимание на формирование свойства IsDead в конструкторе):
public class Enemy
{
public ReactiveProperty<long> CurrentHp { get; private set; }
public ReactiveProperty<bool> IsDead { get; private set; }
public Enemy(int initialHp)
{
CurrentHp = new ReactiveProperty<long>(initialHp);
IsDead = CurrentHp.Select(health => health <= 0).ToReactiveProperty();
}
}
Здесь точно есть, где разгуляться, а использовать все фишки этой библиотеки вместе с MVVM (и другими паттернами этого семейства) одно удовольствие. Так сказать, UniRx на стероидах.
❔ По какой причине я перешёл на реактивное программирование помимо разных фишек R3?
Из-за банальной экономии времени, ибо здесь можно легко повторно использовать ранее написанные механики, так как здесь идёт работа именно с данными, а не с конкретными сущностями. Ещё и меньше кода получится, в отличие от того же ECS. Рекомендую попробовать этот подход тем, кто ещё не попробовал. Возможно, это то, что вы ищете.