添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
void Start ( ) var intervalStream = Observable . Interval ( TimeSpan . FromSeconds ( 3f ) , Scheduler . MainThread ) ; var disposable = intervalStream . Subscribe ( Next , Error , Complete ) ; disposable . AddTo ( this ) ; void Next ( long times ) Debug . LogFormat ( "间隔3秒输出,第{0}次" , times ) ; void Error ( Exception ex ) Debug . LogException ( ex ) ; void Complete ( ) Debug . LogFormat ( "Complete" ) ;

代码解析
Interval第一个参数是时间单位,Scheduler是调度器,表明这个Interval在哪个线程里面来执行
RX默认的调度器拥有的分支调度包括,4个

Scheduler.DefaultSchedulers.ConstantTimeOperations = Scheduler.Immediate;
Scheduler.DefaultSchedulers.TailRecursion = Scheduler.Immediate;
Scheduler.DefaultSchedulers.Iteration = Scheduler.CurrentThread;
Scheduler.DefaultSchedulers.TimeBasedOperations = MainThread;
Scheduler.DefaultSchedulers.AsyncConversions = Scheduler.ThreadPool;

Immediate 立即执行,当前正在运行程序的线程
CurrentThread 当前运行代码的Context所属的线程
MainThread 主线程
TreadPool 线程池

TimeInterval

将一个Observable转换成一个TimeInterval实体

实际用途
当我们有需求知道这次流的执行间隔的时候
当我们有需求转换其他时间单位到time的时候

TimeInterval不能作为基础流,只能是辅助二次转换
在这里插入图片描述
代码示例

public class No03_Interval : MonoBehaviour
    void Start()
        var intervalStream = Observable.Interval(TimeSpan.FromSeconds(3f), Scheduler.MainThread);
        var timeInterval = intervalStream.TimeInterval();
        var disposable = timeInterval.Subscribe(Next, Error, Complete);
        disposable.AddTo(this);
    void Next(TimeInterval<long> entity)
        Debug.LogFormat("间隔{0}秒输出,第{1}次", entity.Interval, entity.Value);
    void Error(Exception ex)
        Debug.LogException(ex);
    void Complete()
        Debug.LogFormat("Complete");
FrameInterval

将原始流转换成帧的计算方式来处理结果
在这里插入图片描述
代码示例

public class No03_Interval : MonoBehaviour
    void Start()
        var intervalStream = Observable.Interval(TimeSpan.FromSeconds(3f), Scheduler.MainThread);
        var timeInterval = intervalStream.FrameInterval();
        var disposable = timeInterval.Subscribe(Next, Error, Complete);
        disposable.AddTo(this);
    void Next(FrameInterval<long> entity)
        Debug.LogFormat("间隔{0}帧输出,第{1}次", entity.Interval, entity.Value);
    void Error(Exception ex)
        Debug.LogException(ex);
    void Complete()
        Debug.LogFormat("Complete");
FrameTimeInterval

既包括Frame也包括Time的实体转换结果
在这里插入图片描述
代码示例

public class No03_Interval : MonoBehaviour
    void Start()
        var intervalStream = Observable.Interval(TimeSpan.FromSeconds(3f), Scheduler.MainThread);
        var frameInterval = intervalStream.FrameInterval();
        var timeInterval = frameInterval.FrameTimeInterval(true);
        var disposable = timeInterval.Subscribe(Next, Error, Complete);
        disposable.AddTo(this);
    void Next(TimeInterval<FrameInterval<long>> entity)
        var frameInterval = entity.Value;
        Debug.LogFormat("间隔{0}时间输出,间隔{1}帧输出,第{2}次", entity.Interval, frameInterval.Interval, frameInterval.Value);
    void Error(Exception ex)
        Debug.LogException(ex);
    void Complete()
        Debug.LogFormat("Complete");

UniRx的功能分为两大模块,第一个模式是基础流,必须在第一时间提供基础操作源数据,基于基础流再进行二次拓展功能,
基于基础流来处理结果的模块需要放置在基础流的后面处理,执行的结果由最近的一次操作返回。
怎么区别一个字段是基础流还是拓展功能流的衔接,看图对比差异

基础流
在这里插入图片描述
功能字段
在这里插入图片描述

如果一个流没有提供泛型方式来处理和返回,则是基础流,反之则是功能流字段,必须嵌套在基础流之后才能使用

如果你觉得对你有那么一点帮助,请点赞打赏是给我最大的动力
呀哈哈,有能力的朋友可以扫下面的打赏二维码↓↓↓
谢谢看官们↓↓↓
在这里插入图片描述

Interval间隔一定的时间单位持续给订阅者通知信息,图解示例代码public class No03_Interval : MonoBehaviour{ void Start() { var intervalStream = Observable.Interval(TimeSpan.FromSeconds(3f), Scheduler.MainThrea... 由河井义文(neuecc)创建 什么是UniRxUniRx(Unity的React式扩展)是.NETReact式扩展的重新实现。 Official Rx实现很棒,但是在Unity上不起作用,并且与iOS IL2CPP兼容性存在问题。 该库解决了这些问题,并为Unity添加了一些特定的实用程序。 支持的平台是PC / Mac / Android / iOS / WebGL / WindowsStore / etc和库。 UniRx可通过Unity资源商店(免费) - 博客以获取更新信息-https: Unity论坛上的支持线程:问我 frame_jump = 2 ignore_frames = 600 (interval = 3) -> 1800 frame_jump = 2 ignore_frames = 40 (interval = 3) -> 120 frame_jump = 1 ignore_frames = 900 (interval = 2) -> 1800 frame_jump
UniRx是什么? UniRx (Unity响应式编程插件) 重写了.Net的响应式扩展。.Net官方的Rx很棒,但是在Unity中无法使用,并且与IOS的IL2CPP有兼容性问题。这个库这些问题并且添加了一些Unity专属的工具类。 支持的平台有:PC/Mac/Android/iOS/WP8/WindowsStore/等等,并且支持Unity4.6之后的所有版本。 UniRx 在 Unity...