Pull to refresh

Comments 26

К сожалению, UniRx умирает. Обновления взять все реже и реже (последнее полгода назад), автор на контакт толком не выходит… А жаль, действительно ведь крутая вещь.

Попробуйте Akka.Streams
Живой проект с похожим функционалом.

Причем тут акка? Акка.net — серверная технология написанная на .net 4.5 и поддерживающая .net core, а мы тут о Unity говорим. В которой до сих пор еще .net framework 3.5

Про 3.5 в юнити не знал.
А вообще Akka.Streams это про реактивные стримы, а не про акторов.

ну они построены поверх Akka и используются в этой экосистеме. Так то есть нормальные Reactive Extensions в .net =)

Вообще не рядом.
Akka.Strems — отдельный продукт, который реализует стандарт Reactive Streams.
Да он использует акторов из фреймворка Akka для своей внутренней деятельности, но используя Akka.Streams программист пишет код как на обычном RX (подписка, мёржи потоков, параллелизация, тротлы, буферы, вот это вот всё).


При этом "нормальные" Reactive Extensions не реализуют стандарт Reactive Streams, а back pressure в issue висит с 2014го года

Да, back pressure они до сих пор не могут реализовать, что печально. Но к слову, у Akka.net есть в планах реализовать взаимодействие между Streams и Rx — github.com/akkadotnet/akka.net/pull/3112
Начиная с версии 2017.1 .net 4.6 :)
В проде или «предварительная версия» ?) если последнее то это пока не всчет.
Вы вводите в заблуждение. Последние обновление 9 дней назад, просто версия в сторе не обновляется, так как активно делается поддержка .net 4.6. Брать надо не из стора, а с репозитория
Про репозиторий и говорил, конечно. Но да, действительно, 9 дней назад был апдейт, а я проверял последний раз месяц назад. До этого последний коммит был аж в июле, и то, чисто для поддержки 2017.1, ничего нового не было.
Это большое дело — поддержка .net 4.6
А какие вам нужны еще обновления, помимо поддержки новых версий Unity и рантайма?
Фиксы багов, улучшение производительности, реализация остальных операторов из Rx, вот это вот всё. Но, конечно, радует, что проект как минимум жив.
Насколько я помню в марте-апреле этого года Yoshifumi Kawai хотел остановить поддержку UniRx. Даже был пост на Medium-е. Но после Unite Tokyo он поменял свое мнение и взялся обратно за поддержку проекта. Тот пост на Medium-е был удален. UniRx живее живых)
forum.unity.com/threads/unirx-reactive-extensions-for-unity.248535/page-6#post-3064218

Последний пример написан совершенно непонятно.


1) Смотрим на преобразования с кнопкой. Взяли кнопку, преобразовали ее с помощью OnClickAsObservable. На подписке уже странность: мы в место того что бы взять кнопку из параметра, хардкодим передачу в параметр конкретной кнопки на которую мы подписались. Далее еще странне: мы передаем даже не кнопку, а ее ид. А в самом методе опять сравниваем ее с захардкоженой конкретной кнопкой. В чем выгода относительно простой подписки?


2) Почему someView.AnimateButton происходит при нажатии в обработчике события кнопки, а не рядом с someView.RenderCount? Суть же в том, что бы 1 раз написать как должно вью работать при изменении модели, а здесь этот момент совершенно упущен.

1) Выгоды относительно простой подписки нет. Кому как удобнее это реализовывать.
2) Суть показать mvp и reactive properties. someView.AnimateButton вызывается в обработчике событий кнопки потому что анимируется кнопка от нажатия этой кнопки. А не потому что увеличивается каунт.

В Rx, да и вообще в паттерне Observable, в самой по себе подписке выгоды нет, это обычный callback. Выгода и вся мощь этого подхода проявляет себя в комбинации стримов друг с другом. Скажем, слушать какое-то событие только между событием А и событием Б. На обычных коллбеках это все реализуется через какое-то внешнее состояние и очень легко ломается при изменениях. В случае observable — все сравнительно легко покрывается тестами и чутко относится к изменениям.

А в чем преимущество использования rx в разработке игр на юнити? Я правда не понимаю.
Мне лично Rx дает удобство, linq — везде. Ну и скорость разработки соответственно.
Есть куча игр которые были разработанны без Rx. Я бы посоветовал вам пока просто присмотреться к UniRx. А потом если почувствуете надобность вы всегда можете использовать его. Придерживаетесь KISS принципа.
en.wikipedia.org/wiki/KISS_principle
Пробовал UniRx. У меня в рантайме строиться модель, в корутине. Меш, текстуры, все.Так вот в основном потоке все работает. А в другие потоки вынести не получается из-за того, что Unity API должно выполняться только в мейн потоке.
Может кто знает как решить проблему?
Выносить Unity API в другие thread-ы не советую. Есть большой шанс того что в игре будет кучу рандомных багов. Решение в main-thread-е, просто нужно это все по другому как-то использовать.
Если под «моделью» вы понимаете меш и текстуры — из основного потока можно вытащить сами расчеты — то есть создание списков точек для меша и битмапа для текстуры.
Для процедурно генерируемых это основная часть расчетов.
А создавать сам меш и текстуру — в основном.
В последнем примере ошибка, на ReactiveProperty не надо вызывать ObservreEveryValueChanged. ReactivePropert это уже Observer, у них уже есть метод Subscribe.

Так сейчас жив UniRx? Последний коммит в репозитории - лето 19го года.

Ну кошмар, могли бы хоть пробелы в пустых строках поудалять для приличия! 2 года без коммитов, как так то?!

Sign up to leave a comment.

Articles