用 UniRx 实现 Timeline 式的异步操作
IEnumerator Play()
{
DoA();
yield return WaitForSeconds(3);
DoB();
yield return WaitForSeconds(2);
DoC();
}
StartCoroutine(Play());
用 DOTween CallBack 方式:
DoA().OnComplete(() =>
{
DoB().SetDelay(3).OnComplete(() =>
{
DoC().SetDelay(2);
});
});
这些做法并无不妥,但我在学习 UniRX 之后发现了更加逻辑清晰的方式,那就是实现一个 Timeline 时间轴:
void PlayTimeline()
{
// 设置计时器
var timer = new IntReactiveProperty(0); // 将 1 秒所用的 frames 作为间隔参数,进行每秒执行
timer.SampleFrame((int)(1 / Time.fixedDeltaTime)).BatchFrame().Subscribe(_ => timer.Value += 1); // 根据时间表安排执行任务
timer.Where(t => t == 1).Subscribe(_ => DoA());
timer.Where(t => t == 3).Subscribe(_ => DoB());
timer.Where(t => t == 5).Subscribe(_ => DoC()); // 执行完取消订阅
timer.Where(t => t == 6).Subscribe(_ => timer.Dispose());
}
这种思路和做动画类似,就是时间点到了各自去执行自己的演出任务。
用 UniRx 实现 Timeline 式的异步操作的更多相关文章
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- 关于async和await的一些误区实例详解
转载自 http://www.jb51.net/article/53399.htm 这篇文章主要介绍了关于async和await的一些误区实例详解,有助于更加深入的理解C#程序设计,需要的朋友可以参考 ...
- C#游戏框架uFrame
C#游戏框架uFrame兼谈游戏架构设计 c#语言规范 阅读目录 1.概览 2.基本概念 3.依赖注入 4.Manager of Managers 5.利用UniRX实现响应式编程 6.研究总结 回到 ...
- Jquery 实现原理之 Ajax
一:Jquery Ajax底层接口有:$.ajaxPrefilters.$.ajaxTransport.$.ajaxSettings.$ajaxSetup.$ajaxSettings; 其中$.aja ...
- JAVA代码设置selector不同状态下的背景颜色
代码实现Shape 代码实现Selector StateListDrawable与GradientDrawable 的运用 在Android开发中,我们时常会用到自定义drawable样式,在draw ...
- Jquery 扩展方法实现原理
JSONP原理 首先:JSON和JSONP是不一样的概念. JSON是一种数据交换格式,而JSONP是非正式传输协议. 该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回 ...
- 2016 Top 10 Android Library
过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,有些项目却持久创造价值,为开发者提供了极大的便利,这些终究由时间来判断.今天,我就来整 ...
- 关于async和await的一些误区
微软的MSDN说async和await是“异步”,但是不少人(包括笔者自己)有一些误区需要澄清:为什么await语句之后没有执行?不是异步吗? [示例代码] public partial class ...
- C#线程学习笔记九:async & await入门二
一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...
随机推荐
- glances linux资源使用监控
安装 yum install glances -y 界面 介绍 命令选项 -b:显示网络连接速度 Byte/ 秒 -B @IP|host :绑定服务器端 IP 地址或者主机名称 -c @IP|host ...
- Webpack的学习总结(1)
入门 Webpack,看这篇就够了 入门 Webpack,看这篇就够了 写在前面的话 一个基础的webpack配置文件 什么是WebPack,为什么要使用它? WebPack和Grunt以及Gulp相 ...
- linux不同环境变量文件的比较,如/etc/profile和/etc/environment
/etc/profile 为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效. 当被修改时,必须重启才会生效.英文描述:"System w ...
- JVM 经典垃圾收集器 —— CMS 收集器
本文部分摘自<深入理解 Java 虚拟机第三版> 概述 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.由于大部分 Java 应用主要 ...
- easyui字典js 切换 jsp页面显示的内容
在列表中直接切换 formatter: function (value) {var name;if(value==0){name='待审批'}else if(value==1){name='通过'}e ...
- 访问需要HTTP Basic Authentication认证的资源的c#的实现 将账号密码放入url
string url = ""; string usernamePassword = username + ":" + password; HttpWebReq ...
- Fragment学习
利用Fragment可以动态的加载页面,减少Activity的数量. 便于开发 类似与html中FragmentSet一样 嵌套在一起,使每个页面为独立的 代码如下: package com.exam ...
- HADOOP单机版配置
1.需要软件 jdk hadoop 将jdk和hadoop解压到自己想要存放的路径 这里我解压到/usr/目录下 sudo tar -zxvf java1.8.tar.gz -C /usr/ hado ...
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve 错误1130:主机192.168.1.3& ...
- 浅入kubernetes(2):Kubernetes 的组成
目录 说明 Kubernetes集群的组成 What are containerized applications? What are Kubernetes containers? What are ...