UniRX

news/2025/1/11 12:45:36/

凉鞋Qframework作者文章链接:https://zhuanlan.zhihu.com/p/85663335
王小TuniRX精讲链接:https://gitee.com/xiaoTNT/uni-rx-intensive-lecture/tree/master
uniRX下载链接:https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276
siki学院凉鞋老师UniRx第一季到第四季教程链接:https://www.sikiedu.com/course/271

UniRX是什么

UniRx 是一个 Unity3D 的编程框架。它专注于解决时间上异步的逻辑,使得异步逻辑的实现更加简洁和优雅。
UniRx 提供了一种编程思维,使得平时一些比较难以实现的异步逻辑(比如以上这种),使用 UniRx 轻松搞定,并且不失代码的可读性。
UniRx 就是 Unity 版本的 Reactive Extensions,Reactive Extensions 中文意思是:响应式扩展,响应式指的是观察者和定时器,扩展指的是 LINQ 的操作符。Reactive Extensions 以擅长处理时间上异步的逻辑、以及极简的 API 风格而闻名。而 UniRx 的出现刚好解决了这个问题,它介于回调和事件之间。它的原理和 Coroutine (迭代器模式)、LINQ 非常相似,但是比 Coroutine 强大得多。UniRx 将时间上异步的事件转化为响应式的事件序列,通过 LINQ操作可以很简单地组合起来。为什么要用 UniRx? 答案就是游戏本身有大量的在时间上异步的逻辑,而 UniRx 恰好擅长处理这类逻辑,使用 UniRx 可以节省我们的时间,同时让代码更简洁易读。
还提供:
优雅实现 MVP(MVC)架构模式。
对 UGUI/Unity API 提供了增强,很多需要写大量代码的 UI 逻辑,使用 UniRx 优雅实现。
轻松完成非常复杂的异步任务处理。

最基本的使用方式

普通计时器书写

void Start(){StartCoroutine(Ie());
}
Ienumerator Ie(){yield return new WaitForSeconds(2);Debug.log("2秒");
}

uniRX的实现

void Start(){Observable.Timer(TimeSpan.FromSeconds(2f)).Subscribe(_=>{Debug.Log("2秒");                 }).AddTo(this);
}

Box在隐藏的时候输出语句

public GameObject Box;
void Start(){//Box.UpdateAsObservable()//Box.OnColliaionEnterAsObservable()//Box.OnMouseDownAsObservable()Box.OnDisableAsObservable().Subscribe(_=>{Debug.Log("disable");                }).AddTo(Box);//Box被销毁Box.OnDestoryAsObservable().Sibscrible(unit=>{Debug.Log("被销毁");             })//每秒输出Box.UpdateAsObservable().Sample(TimeSpan.FromSeconds(1f)).Subscribe(unit=>{Debug.Log("每秒输出");        });//点击鼠标左键Box.UpdateAsObservable().Where(unit=>{bool mouseButtonDown=Input.GetMouseButtonDown(0);if(mouseButtonDown){Debug.log("按下鼠标左键");return true;              }          return false;}).Delay(TimeSpan.FromSeconds(1f)).Subscribr(unit=>{Debug.log("延迟1秒");      })}

修改变量值

普通书写

private int _index;
public int Index{get=>_index;set{_index=value;Debug.Log("修改变量");  }
}

uniRX书写

using Sirenix.OdinInspector;
using UniRX;private ReactiveProperty<int> index=new ReactiveProperty<int>(1);
void Start(){index.Subscribe(=>{Debug.Log("index发生改变");}).AddTo(this);
}
[Button]
private void Test(){index.Value++;
}

http://www.ppmy.cn/news/262107.html

相关文章

达梦数据库dblink测试(DM-ORACLE19c及DM8-DM8)

目录 DM与DM创建DBLINK. 3 一、配置203服务器... 3 1、主服务器203开启mal服务... 3 2、主服务器203配置dmmal.ini文件... 3 3、重启203数据库... 4 二、配置200服务器... 4 三、创建dblink. 4 DM与Oracle数据库创建dblink. 5 一、DM服务器&#xff1a;... 6 1、初始…

《精通特征工程》学习笔记(3):特征缩放的效果-从词袋到tf-idf

1.TF-IDF原理 tf-idf 是在词袋方法基础上的一种简单扩展&#xff0c;它表示词频 - 逆文档频率。tf-idf 计算的不是数据集中每个单词在每个文档中的原本计数&#xff0c;而是一个归一化的计数&#xff0c;其中每个单词的计数要除以这个单词出现在其中的文档数量。 词袋bow(w, …

蒙特卡洛及其衍生

这些方法都依赖于我们知道输入和输出&#xff0c;但只是不知道这个映射 f f f。很多时候需要计算关于 f f f的积分&#xff0c;逐个带点显然太费劲了。 蒙特卡罗抽样方法 假设我们要求积分 h ( θ ) ∫ E h ( θ ) π ( θ ∣ x ) d θ h(\theta)\int_E h(\theta)\pi(\theta…

什么是IT服务请求管理

什么是服务请求 用户每天都会提出各种 IT 请求。它可能是对新软件的请求、旧硬件的更换、对应用程序的访问或资产组件的更改。这些请求被归类为服务请求。 服务请求是向 IT 团队发出的请求&#xff0c;以满足最终用户的需求。理想情况下&#xff0c;请求是从服务请求目录中选择…

超级计算器

#main{border: 10px outset orange;margin: 30px auto;background: #ABABAB;box-shadow: 5px 5px #CCCCCC inset;padding-top: 20px; }/*设置最外层表格样式*/ th{height: 40px;border: 2px outset #CCCCCC; } #result{width: 100%;height: 100%;box-shadow: 3px 3px #…

英特尔傲腾 DC P4800X 固态盘

一. 传统数据中心的性能瓶颈 在传统的CPU、内存DRAM、固态盘SSD和磁盘的数据中心架构里面&#xff0c;存在一个巨大的瓶颈和鸿沟就是&#xff0c;NAND SSD的时延与DRAM内存的时延是一万倍级别的差距。 二.傲腾技术 为了解决这个SSD与内存均有的时延问题&#xff0c;英特尔推出…

C语言:自增运算符和自减运算符

自增运算符 自增运算符的符号是“”&#xff0c;他是单目运算符&#xff0c;结合性从右往左&#xff0c;经常与变量结合使用 自增运算符的作用是使变量增1。 自增运算符有两种情况&#xff1a; i; // 前置运算 先增加&#xff0c;后执行 i; //后置运算 先执行&#xff0c;后自…

c++语法学习总结

一. vector相关操作 vector() 的最大、最小值&#xff0c;及其对应下标 例 a[]{1,2,3,4,5,6}; 最大值&#xff1a;int maxValue *max_element(a,a6); 最小值&#xff1a;int minValue *min_element(a,a6); 例 vector<int> v; 最大值下标&#xff1a;int maxPositi…