unirx 操作符

UniRx 重写了.net 响应式扩展,故可在UniRx中使用LinQ表达式。
一个Observable就是一条事件流,可进行LinQ操作。

操作符相关类:

  • Observable
  • Observable.Concatenate
  • Observable.Paging
  • ObservableTriggerExtensions.Component

Where 条件过滤

过滤器,相当于if语句,过滤掉false,true时才往下继续走。

1
2
3
Observable.EveryUpdate() //每帧执行,内置Observalble(可观测)类
.Where(_ => Input.GetMouseButtonDown(0)) // 按下左键时,返回tue,事件流继续往下走
.Subscribe( _ => Debug.Log("按下左键") ); // OnNext检测到事件,即where条件满足

First 选取首个

获取首个可通过的事件,带参数时,首个true才往下继续走,其余true & false 过滤掉

写法1

1
2
3
4
Observable.EveryUpdate() //每帧执行,内置Observalble(可观测)类
.Where(_ => Input.GetMouseButtonDown(0)) // 按下左键时,返回tue,事件流继续往下走
.First() //只允许首个事件通过
.Subscribe( _ => Debug.Log("按下左键") ); // OnNext检测到事件,即where条件满足

写法2

1
2
3
Observable.EveryUpdate()
.First(_ => Input.GetMouseButtonDown(0))
.Subscribe(_=> Debug.Log("按下鼠标事件1"));

AddTo 关联销毁

从 IDisposible 扩展出来的方法,用来将脚本的OnDestroy事件 | GameObject 的销毁事件 与 UniRx绑定在一起。

1
2
3
Observable.Timer(TimeSpan.FromSeconds(1.0f) //Timer倒计时,内置Observalble类
.Subscribe() // 订阅事件
.AddTo(this); // 将this 的 destroy事件绑定到 Timer(Observable)类中

当脚本被销毁时,对Timer进行同步销毁

另外,当AddTo设置全局事件流&非全局事件流

1
2
3
4
5
Observable.EveryUpdate()
.Subscribe(_ => {})
.AddTo(this); //当前compoment被销毁时,结束EveryUpdate
Observable.EveryUpdate()
.Subscribe(_ => {}) //全局事件流,游戏结束时才结束

Select

SelectMany

ContinueWith

Distinct

DistinctUntilChanged

ToArray

ToList

Materialize

Dematerialize

ForEachAsync

Do

Do

DoOnError

DoOnCompleted

DoOnTerminate

DoOnSubscribe

DoOnCancel