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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段