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学习笔记

(转)Akka学习笔记

JavaWeb学习笔记总结 目录篇

系列文章--Node.js学习笔记系列

Windows编程课程学习笔记