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]);
	});
}

总结

  1. “拉数据” 转变为 “数据推” !
  2. 一切都是数据流!
  3. 可以灵活异步处理数据流!

以上是关于UnityUniRx学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

UnityUniRx学习笔记

UnityUniRx学习笔记

学习笔记:python3,代码片段(2017)

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

DOM探索之基础详解——学习笔记

学习笔记 链接