UniRx
zwlstc
what I can not create , what I do not understand
展开
-
UniRx---源码阅读提示 FromCoroutine
先上函数 public static IObservable<Unit> FromCoroutine(Func<IEnumerator> coroutine, bool publishEveryYield = false) { return FromCoroutine<Unit>((observer, cancellationToken) =&...原创 2018-12-12 22:18:11 · 561 阅读 · 0 评论 -
UniRx---ReactiveProperty ReadOnlyReactiveProperty
两者有个共同点 内部都有一个容器储存subscribe时传进来的observer 前者很像subject,区别就在于 subject是通过直接调用方法来发射数据的 而ReativeProperty是通过给Value属性赋值来发射数据(值和原来不同时,给所有保存的observer发射数据) 而ReadOnlyReactiveProperty是一朵奇葩,他其实同时是observable 和...原创 2018-12-12 01:50:43 · 987 阅读 · 0 评论 -
UniRx---源码阅读提示 IObservable IObserver
核心的两个接口 public interface IObservable<T> { IDisposable Subscribe(IObserver<T> observer); } public interface IObserver<T> { void OnCompleted(); ...原创 2018-12-11 14:27:34 · 666 阅读 · 1 评论 -
UniRx---源码阅读提示 OperatorObservableBase OperatorObserverBase
create型的Observable(用户自定义) 需要缓存一个fun<Iobserver<T>,IDisposible> 用来决定subscribe时的行为(包括返回一个注销器) 而内置的Obserable 不需要缓存这个回调是因为 注册时候的逻辑是固定的 所以不需要observable创建者提供自定义的注册行为 有些observable继承的一个基类:Operat...原创 2018-12-11 13:46:10 · 283 阅读 · 1 评论 -
UniRx---简单封装一个SubjectManager 解耦主题和监听者
Subject<T> 是UniRx 推荐的 事件实现方式 ( UniRx是AssetStore上的一款免费插件,但其实他的出身很地道,脱胎于微软的Rx框架,主要思想是像Linq那样对订阅的事件进行操作,并且他还能对操作进行 时间调度,线程调度,而UniRx就是Rx的Unity版) 。在开发中,这种数据发射工作(在使用UniRx时,可以把事件触发时调用观察者回调并传递参数的行为 形象的理...原创 2018-12-11 16:45:55 · 827 阅读 · 0 评论 -
UniRx---Take
乍看之下,比较无趣的操作符 拿取序列中的前多少个元素,真的是这样无趣吗? 请看如下这个双击判断的实现 public class Take : MonoBehaviour { void Start() { //用了一个selectMany的技巧把传来的无效参数重新转换成一个事件源 ...原创 2018-12-07 15:02:55 · 515 阅读 · 0 评论 -
UniRx---SelectMany
这是个神奇的操作符,本质功能和select一样 提供一种转换 只是你必须把传来的对象转换成可迭代的对象。 很直观的用法可以打散容器里的容器,比如一个list<string> 对他进行默认selectMany后 就会变成一堆char 下面,展现一种非常imba的用法 可以任意组合协程的执行顺序!! public class SelectMany : MonoBehaviou...原创 2018-12-07 14:27:47 · 871 阅读 · 0 评论 -
初学UniRx有感
很久没有那种写完代码后的舒爽感了,直到这几天遇到了UniRx 我真的被这种简洁,这种优雅给惊呆了。 我还只初学了一些皮毛,天知道深入学习以后还有什么惊喜等着我... 简单来说 ,对于Unity脚本,UniRx可以解决Update的臃肿和堆砌的成员变量过多的问题。 可以用极少的代码完成时间上的异步逻辑,可以使用响应式属性(可以订阅其变化的属性)和SetUIXXX之类的丑陋接口说拜拜。 这边...原创 2018-12-06 22:54:17 · 803 阅读 · 0 评论 -
UniRx---Where
很好理解的 操作符,相当于是 过滤器 事件源 携带 自己的参数 流经此处后,会被一个判断函数拦截 通过后,仍旧携带本来的参数原创 2018-12-06 03:01:59 · 486 阅读 · 0 评论 -
UniRx---Select
UniRx中所有可订阅的对象都是一种事件源,并且可以传递给订阅者一些参数 而Select,它就像一种转换器 把事件源传递过来的参数 转换成另外一种形式 转换前后的类型也可以不同 比如你有一个reactive的int属性Hp(响应式属性, 或者说可订阅的属性,是UniRx的魅力之一,语法简洁,提供订阅功能,观察属性的变化) 本来这个事件源传递的是一个int型的参数 而Hp.Selec...原创 2018-12-06 02:37:05 · 779 阅读 · 0 评论 -
UniRx---Subject ReactiveCommand
先说前者Subject<T> 相当于是一个事件(通常在UniRx中理解成发射源), 调用OnNext(t)可以给自己的订阅者发射T类型的数据 而接收者可以用UniRx的操作符对发射进行各种过滤、拼接、转换 。 这即是subject优于传统事件的地方。 后者 ReactiveCommand<T> 本质上仍然是一个Subject<T> 他通过调用Excute...原创 2018-12-12 10:21:49 · 766 阅读 · 0 评论