操作符 First
在专栏的简介时,有这么一段代码:
Observable
.
EveryUpdate
(
)
.
Where
(
_
=>
Input
.
GetMouseButtonUp
(
0
)
)
.
First
(
)
.
Subscribe
(
_
=>
{
/* do something */
}
)
.
AddTo
(
this
)
;
这段代码实现了“只处理一次鼠标点击事件”这个功能。
代码很简单,不过有一个陌生的操作符 "First"。
代码中事件通过 Where 过滤之后,又通过 First 进行了一次过滤。
直接看下图就理解了。
很简单,就是获取第一个通过的事件。
更好的实现
First 还可以传一个条件方法(谓词函数)进去。也就是说,以上的功能可以不使用 Where 就可以搞定
Observable
.
EveryUpdate
(
)
.
First
(
_
=>
Input
.
GetMouseButtonUp
(
0
)
)
.
Subscribe
(
_
=>
{
/* do something */
}
)
.
AddTo
(
this
)
;
代码运行的结果与原来一致,运行之后只处理一次 Unity 的鼠标点击事件。
今天的内容就这些。
知识地图
AddTo
在之前的文章中,我们接触了 AddTo 这个 API,但是还没有进行正式介绍。在这篇文章中我们就了解一下 AddTo 这个 API。
其实字面意思上很容易理解,就是 添加到。
添加到哪里呢?
添加到 Unity 的 GameObject 或者 MonoBehaviour。
为什么要添加到 GameObject 或者 MonoBeaviour 呢?
是因为,GameObject 和 MonoBehaviour 可以获取到 OnDestroy 事件。也就是 GameObject 或者 MonoBehaviour 的销毁事件。
那么用这个销毁事件干嘛呢?
答案是用来 进行与 UniRx 进行销毁事件的绑定,也就是当 GameObject 或者 MonoBehaviour 被销毁时,去销毁与之绑定的UniRx 任务。
这就是 AddTo API 的作用。
其实用起来很简单,代码如下:
Observable
.
Timer
(
TimeSpan
.
FromSeconds
(
1.0f
)
.
Subscribe
(
)
.
AddTo
(
this
)
;
// Or gameObejct
只要在事件流的最后添加 AddTo(this),当 this 所在的 GameObject 销毁时,这个 Timer 就会被销毁。
为什么会这样?
本质上, AddTo 是一个静态扩展关键字,它对 IDisposable 进行了扩展。
只要任何实现了 IDisposable 的接口,都可以使用 AddTo API,不管是不是 UniRx 的 API。
当 GameObject 销毁时,就会调用 IDisposable 的 OnDispose 这个方法。
很容易理解。
AddTo 能做什么?
有了 AddTo,在开启 Observable.EveryUpdate 时调用当前脚本的方法,就不会造成引用异常等错误,它使得 UniRx 的使用更加安全。
今天的内容就这些。
知识地图
转载请注明地址:凉鞋的笔记:
liangxiegame.com
更多内容
-
QFramework 地址: https://github.com/liangxiegame/QFramework
-
QQ 交流群: 623597263
-
Unity 进阶小班 :
-
主要训练内容:
-
框架搭建训练(第一年)
-
跟着案例学 Shader(第一年)
-
副业的孵化(第二年、第三年)
-
权益、授课形式等具体详情请查看 《小班产品手册》 :https://liangxiegame.com/master/intro
-
关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。
920

被折叠的 条评论
为什么被折叠?



