Unity之UniRX

UniRX好好用,我在这里做一个记录。

一、Stream流的思想

使用UniRx,就要使用响应式编程(Reactive Programming)的思想。那么响应式编程的思想是什么呢。可以类比面向对象的编程(OOP)——万物皆对象,响应式编程的思想是——万物皆可流。即什么东西都可以当做流来思考。具体可以参考https://zhuanlan.zhihu.com/p/27678951  这篇文章,里面讲了一下流的概念。

我举个例子。现在有一条以时间为横轴的坐标轴。我们鼠标的点击事件就记录在这个坐标轴上。我鼠标在时刻a,点了一下正键,那么就在坐标的时刻a处,记录一下。假如是我规定这个轴有一个长度,1个小时。那么通过这个轴,我就可以知道一个小时里,我鼠标的点击情况。 对于这样的一个以时间为载体,里面载有不同的鼠标点击信息的这样一个东西,我将其称为流。随你怎么称呼,数据流也好,鼠标点击的事件流也好。(全是我自己的想法,仅作为启发,如果觉得不对,还请包涵)

当然,对于这样的一条鼠标点击事件流,我可以做很多事情。通常对于流的处理,我们可以截取流的一部分重新生成新的流(比如,截取里面的1分钟,或者截取里面的100毫秒),可以过滤这个流里面的一部分信息生成新的流(比如,我将原流里面的鼠标反键点击数据去掉,生成的新流里面只包含鼠标的正键点击的数据),又比如我可以对流进行监听(比如,我对流里面每一个点击事件进行判断,当我第一次点击正键的时候,我会在控制台打印出“第一次点击鼠标”字样),还可以将一个数据流与另一个数据流合并(比如将鼠标的点击事件流与键盘的点击事件流合并,这样我就可以对新的流进行联合处理,比如按下空格键的同时点击鼠标正键就会播放一段音乐。),当然可以取消 一个流(dispose)。

 

二、UniRX的肤浅讲解

        private void Start()
		{
			Observable.EveryUpdate().Subscribe(_ => Debug.Log("每帧都会触发哦"));
		}

Observable.EveryUpdate()表示将每一帧事件作为一个事件流返回。

Subscribe(_ => Debug.Log("每帧都会触发哦"))  ,就是订阅一个事件,绑定一个委托的意思。它的触发条件是在每一帧触发一次。对于内部的实现细节,是每一帧事件出现的时候就是调用OnNext(),然后就会调用Subscribe绑定的委托。

上面代码的意思就是将游戏里面每一帧事件,连成一个数据流,然后对于这个数据流,每一个事件发生(也就每一帧发生)的时候,都会调用Debug.Log("每帧都会触发哦") 这个。

万物皆可流。原本我们需要在Update调用的方法,现在只要在Start里面,将每一帧转化成事件流,然后给每一个事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值