UnityUniRx学习笔记
Posted 不如詩啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnityUniRx学习笔记相关的知识,希望对你有一定的参考价值。
【Unity】UniRx学习笔记
教学视频网址: https://www.bilibili.com/video/BV1s7411g72C?from=search&seid=3314917337798091922
UniRx语法格式
Observable.XXX.Subscribe();
翻译:XXX数据流来了之后要做什么事情.
Observable.XXX.Subscribe(
_ =>
//Do OnNext
,
ex =>
//Do OnError
,
() =>
//OnComplete
);
案例分析1
简单例子
void Start()
Observable.EveryUpdate().Subscribe(_ =>
print("一帧数据流来了");
);
结合Linq方法
void Start()
//结合Linq方法
Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0)).Subscribe(_ =>
print("从每帧数据流中筛选出按下鼠标左键的特定流!");
);
UniRx操作符:
1: UniRx操作符_自Linq
2: UniRx操作符_自Rx.Net
3: UniRx操作符_UniRx独有
案例分析2
数据流能够嵌套适用
void Start()
//点火型
var stream1 = Observable.EveryUpdate().Subscribe(_ =>
//事件流1: 每帧输出1
print("1");
);
var stream2 = Observable.EveryUpdate().Subscribe(_ =>
print("2");
Observable.Timer(System.TimeSpan.FromSeconds(1)).Subscribe(_ =>
//等1秒后执行
stream1.Dispose(); //取消事件流1
);
);
案例分析3
数据流合并
void Start()
//合并两个数据流, 相当于"或"操作
var stream1 = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0));
var stream2 = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(1));
Observable.Merge(stream1, stream2).Subscribe(_ => print("Mouse has clicked!"));
案例分析4
多线程支持
void Start()
//易实现多线程支持
var threadAStream = Observable.Start(() = >
//开启一个线程, 等待一秒后返回1
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
return 1;
);
var threadBStream = Observable.Start(() = >
//开启一个线程, 等待一秒后返回2
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
return 2;
);
//当两个线程都返回后, 在主线程输出各自的返回值
Observable.WhenAll(threadAStream, threadBStream)
.ObserveOnMainThread().Subscribe(xs =>
Debug.Log(xs[0] + ":" + xs[1]);
);
总结
- 由 “拉数据” 转变为 “数据推” !
- 一切都是数据流!
- 可以灵活地异步处理数据流!
以上是关于UnityUniRx学习笔记的主要内容,如果未能解决你的问题,请参考以下文章