
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
近期评论