Unirx

1 OnNext & SubScribe

OnNextSubScribe 都是在 Subject 中实现的方法,他们的行为分别如下:

  • Subscribe 在接收到消息时执行注册的函数

  • OnNext 将收到的消息传递给Subscribe注册的函数并执行

Subject<string> subject = new Subject<string>();  
  
subject.Subscribe(msg => Debug.Log("Subscribe1:" + msg + "\n"));  
subject.Subscribe(msg => Debug.Log("Subscribe2:" + msg + "\n"));  
subject.Subscribe(msg => Debug.Log("Subscribe3:" + msg + "\n"));  
  
subject.OnNext("hello 001");  
subject.OnNext("hello 002");  
subject.OnNext("hello 003");

放入 start 执行结果如下

Subscribe1:hello 001
Subscribe2:hello 001
Subscribe3:hello 001

Subscribe1:hello 002
Subscribe2:hello 002
Subscribe3:hello 002

Subscribe1:hello 003
Subscribe2:hello 003
Subscribe3:hello 003

2 一些示例

每一个的 AddTo(this) 只是为了使其生命周期和脚本一样,其实就是在运行的时候挂载了一个 Observable Destory Trigger 脚本

2.1 计时器

2.2 Update

2.3 Where

2.4 每秒输出一次

2.5 实现 mvc架构

例如有一个 int 值,本来是希望在其改变时候输出一些日志

这样每次点击鼠标左键,都会去执行 index 订阅的消息,此处 ReactiveProperty 在使用 1 初始化值的时候也会去触发订阅的方法。可以使用 Skip 跳过第一次初始化

3 生命周期增强版

比如要在物体隐藏的时候输出日志

同理还有碰撞时,被鼠标点击时

4 AddTo

既然有事件的注册那么也会有取消注册

4.1 事件流主动取消注册

此时可以看到,返回的是一个 IDisposable 接口类型,也就是实现了 Dispose 这个方法,这个事件流现在就是可释放的,可以主动去释放这个事件。

4.2 AddTo

使用 AddTo 将这个事件流绑定到 gameObject 上面,当 gameObject 销毁时,也随之调用 Dispose 去释放绑定的事件

同时也可以使用 CompositeDisposable 去管理事件流的生命周期

将事件流的生命周期交给 CompositeDisposable 管理后:

  • 可以直接调用 Dispose 去释放

  • 也可以再使用 AddTo 把生命周期绑定到其他物体或者脚本上面

5 Subject

类似于泛型委托 Action ,可以像这样注册事件

6 将事件转为 Observable

6.1 UnityEvent

6.2 event Action

此处的 _action 就是 Subscribe 中注册的东西

7 MessageBroker

Last updated