UniRx之基本语法格式

news2024/9/21 12:22:15

前言

想要更好的去学习UniRx,我们最好是先理解UniRx 的语法格式。就像我们去学习英语或者汉语一样,理解了基本的语法规则后,再学其他的就信手拈来了。

语法示例

下面我们来看一个最简单的示例,

        Observable.EveryUpdate()
            .Where(_ => Input.GetMouseButtonDown(0))
            .Subscribe((x) =>
        {
            Debug.Log("点击了鼠标左键");
        });

这个例子虽然简单,但是确实最标准的一个UniRx的语法了。
首先:Observable.EveryUpdate():这句意思是创建一个EveryUpdate的事件发送者。
.Subscribe是事件的接收者,订阅者,发送者发送事件,接收者可以接收事件。没有订阅者订阅之前,数据流是不会执行的。
.Where:是一个过滤器,就是发送者和接收者之间设置的一个条件,会过滤掉不符合条件的事件。
整理分析:这句话的意思就是,开一个每帧的循环事件,监听鼠标左键点击的条件,满足条件,事件接收者就会接收到事件。
可以看下面示意图:
在这里插入图片描述

语法分析

所以我们可以看到UniRx的基本语法就是

  • 创建一个或多个事件(被订阅者)发送者 + 一个或多个条件 + 事件订阅者(接收者)
    Overservable.xxxxx是一个静态函数,可以返回一个IObservable对象。这类的静态函数有很多。
    IObservable接口有很多的函数扩展,如Where,Select,Zip,等等。这些函数大部分是和Linq语法一致的,UniRx也有些自己的扩展。大部分都是对订阅事件的一个条件约束,或者理解为数据流的过滤方式。
    .Subscribe(onNext,onError,onComplete)订阅函数,有三个参数,后俩是可选的,
    onNext代表,数据流执行后的一次结果返回,或者是 一次事件接受
    onError代表,数据流执行异常。
    onComplete,代表这个IObservable可订阅对象的执行任务完成了。如果是一些循环执行的订阅,onComplete永远不会执行。

我们再来看一个复杂的例子:

        var clickStream = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0));
        
        clickStream.Buffer(clickStream.Throttle(TimeSpan.FromMilliseconds(250)))
            .Where(xs => xs.Count >= 2)
            .Subscribe(xs => Debug.Log("双击事件"));

我们来简单分析下:
Observerble.EveryUpdate:代表开启一个每帧循环事件,
.Where;条件每次鼠标左键点击
clickStream.Throttle:每个一个时间间隔输出一次数据,即每0.25s输出一次数据
clickStream.Buffer:对输出的数据,我们再进行一个缓冲,就是存储到一个集合中。
.Where(xs.Count>=2):如果缓冲的数据>2个,就代表是连续点击了两次鼠标。
.Subscribe:就是双击事件的订阅者了。

我们可以看到,即使是复杂的UniRx语法,也离不开我们最基础的语法接口,之不是里面 有一些我们不熟悉的语句而已,如果我们了解了Buffer ,了解了Throttle,等等,那么我们就可以游刃有余的使用UniRx了。

好了,这篇文章先到这里,希望能够对你 有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git安装,配置及Gitee项目代码pull到本地

一、Git安装从git官网下载:https://git-scm.com/downloads选择适合的版本进入下载,然后傻瓜式安装直到结束。检查安装是否成功:进入任意文件夹点击右键选择Git Bash Here进行基本配置输入如下命令:git --version就会显示当前安装的…

【Windows】ip地址修改器v5.0.5.4

简介 IP地址修改器,一款能够快速的切换IP地址,在几个不同的固定IP之间进行切换,手动输太麻烦,所以可以用到这款IP地址修改器! 下载 ip地址修改器v5.0.5.4 软件介绍 程序主要原理还是利用了WMI的Win32_NetworkAda…

二叉搜索树,平衡二叉树,红黑树,B树,B+树

文章目录二叉树(BT)1. 满二叉树2. 完全二叉树二叉搜索树(BST)平衡二叉搜索树(AVL)1. 定义2. 如何保持平衡——旋转红黑树(RBTree)1.定义2.红黑规则3.插入规则B树1.定义2.在磁盘系统中…

云存储、云计算与分布式存储、分布式计算是一回事吗?

随着互联网的蓬勃兴起,大数据、人工智能、物联网、云计算与云存储等这些专业词汇在大众视野内出现的频率越来越高,再加上近几年分布式技术异军突起,更使得分布式存储、分布式计算等成为热词。然而,很多人对这些名词都一知半解&…

HTML5+CSS3(七)-全面详解(学习总结---从入门到深化)

目录 字体属性 color font-size font-weight font-style font-family 学习效果反馈 背景属性一 background-color属性 background-image属性 background-repeat属性 学习效果反馈 背景属性二 background-size属性 background-position属性 background-attachment属性…

Utools的安装与使用

Utools的安装与使用 新一代效率工具平台. 自由组合插件应用,打造专属你的趁手工具集,我们可以根据自己需求下载对应插件,然后通过Utools启动插件,不用向以前那样不同的插件需要找到对应插件地址。我们也可以通过设置全局快捷键快速…

ESP-IDF:字符串中字符转为链表结点入栈(使用STL stack),然后打印栈中内容

ESP-IDF:字符串中字符转为链表结点入栈(使用STL stack),然后打印栈中内容 /字符串中字符转为链表结点入栈(使用STL stack),然后打印栈中内容/ #include typedef struct LINKNODE20 { struct LINKNODE20 * next; }linknode20; typedef struct MYCHAR20 { linknode20 node; ch…

C++ STL源码剖析 笔记

写在前面 记录一下《C STL源码剖析》中的要点。 一、STL六大组件 容器(container): 各种数据结构,用于存放数据;class template 类泛型;如vector, list, deque, set, map; 算法(a…

LeetCode刷题系列 -- 113. 路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22输出&#x…

Java:函数与数组的相关代码题目

引言: 放松一段时间,今天又重新开始与大家来学习,假期正是我们反超别人的最佳时间,大家要抑制自己的情绪,低头学习。没有任何一种成功是短时间可以得到的,我们要做的就是,沉下心来&#xf…

偶数科技入选 IDC 中国分布式数据库报告,获 Innovator 殊荣

C Innovator 近日,全球知名咨询研究机构 IDC 发布了《中国分布式关系型数据库》研究报告,通过调研 CIO、IT 负责人、投资机构和众多厂商,评选出该领域综合表现突出的创新型厂商。偶数科技凭借其新一代云原生数据库 OushuDB 和实时湖仓一体创新…

rocketmq源码打包

背景:升级broker版本,并修改broker源代码步骤:1.下载源码,地址:https://rocketmq.apache.org/download/binary是编译好的可以直接使用,source是还没编译过的源代码,需要自行编译。因为我需要修改…

SpringMVC之Rest风格

目录 一:REST简介 二:RESTful入门案例 1.环境准备 三:思路分析 四:修改RESTful风格 五:RESTful快速开发 六:RESTful案例 1.需求分析 2. 环境准备 2 .后台接口开发 3.页面访问处理 步骤2:访问page…

java import javax.mail.*报错原因

今天在进行Javaweb项目开发导包时候出现问题。导入java import javax.mail.*进行报错在网上查询相关问题最后知道原因为:缺少收发邮件的jar包💡解决办法是下载相关jar包下载地址http://www.oracle.com/technetwork/java/javamail/javamail145-1904579.ht…

DS18B20测量温度数码管显示

DS18B20温度传感器简介DS18B20是一种数字温度传感器。它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点。DS18B20温度传感器特点1、单线接口:DS18B20仅需一条线可实现与微处理器双向通信。…

【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用容器(stack容器)

文章目录一、stack 基本概念二、stack 常用接口一、stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 p…

openMMLab 2

本文是openmmlab AI实战营的第二次课程的笔记,以下是我比较关注的部分。在图像分类任务上,视觉基础模型的发展,最新的是convNeXt。convNeXt : 返璞归真,将Swin Transformer 的模型元素迁移到卷积网络中,性能反超Transf…

设计模式-行为型模式(二)

目录 6.行为型模式 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6.6.1 概述 6.6.2 结构 6.6.3 案例实现 6.6.4 优缺点 6.6.5 使用场景 6.6.6 JDK中提供的实现 6.7 中介者模式 6.7.1 概述 6.7.2 结构 6.7.…

物联网网关最常用的边缘计算优势在哪里

物联网是继计算机、互联网与移动通信网之后信息技术产业的第三次发展浪潮。通信技术能够使物联网将感知到的信息在不同的终端之间进行高效传输和交换,实现信息资源的互通和共享,是物联网各种应用功能的关键支撑。 物联网网关的通讯技术有很多&#xff0c…

COMSOL仿真教程—激光烧蚀

本例使用二维模型,将来自激光的入射热通量模拟为金属表面上空间分布的热源,从而得到金属的烧蚀过程和瞬态温度分布。仿真思路方案设计思路建模过程思路激光烧蚀.pdf建模说明新建在新建界面里点击模型向导。在选择物理场树中选择 传热>固体传热 以及 数…