UniRx-Unity响应式编程插件(3):让协程更有效率

本文译者:郑洪智 - 你的技术探路者

翻译日期2018年2月1日

本文翻译自UniRx(https://github.com/neuecc/UniRx)插件的ReadMe

这个插件是我特别喜欢的一个插件,希望能将这种技术思想传播给大家

UniRx是什么?

UniRx (Unity响应式编程插件) 重写了.Net的响应式扩展。.Net官方的Rx很棒,但是在Unity中无法使用,并且与IOS的IL2CPP有兼容性问题。这个库这些问题并且添加了一些Unity专属的工具类。 支持的平台有:PC/Mac/Android/iOS/WP8/WindowsStore/等等,并且支持Unity4.6之后的所有版本。

前情回顾

UniRx - Unity响应式编程插件(1)

中讲了

如何让你的代码更简洁

如何简化网络操作

如何和协程一起使用

在UniRx - Unity响应式编程插件(2)中讲了

让多线程更简单

使用触发器让代码更简洁

Observable 生命周期管理

将Unity回调转为IObservable

使用Subject (或AsyncSubject用于异步操作):

Unity5中移除了 ,并用 替代。所以可以更简单地用 。

流式日志记录器Stream Logger

调试Debugging

中的 操作符可以帮助调试。

将按事件顺序显示 , , , , 的调用并通过Debug.Log打印出来。只在 时生效。

Unity-specific Extra Gems(针对Unity的超酷额外功能)

Framecount-based time operators(基于帧数的时间操作)

UniRx 提供了一些基于帧数的时间操作:

例如,一次延迟调用:

Every* 方法们的执行顺序是

EveryGameObjectUpdate 在同一帧被调用,从 MainThreadDispatcher.Update 中调用(作者建议 MainThreadDispatcher 脚本比其他脚本先执行(ScriptExecutionOrder 设置为 -32000)

EveryLateUpdate, EveryEndOfFrame 在同一帧调用。

然后在下一帧调用EveryGameObjectUpdate,以此类推

MicroCoroutine(微协程)

MicroCoroutine 在内存上更有效率,而且更快。这是基于Unity的这篇博客《10000 UPDATE() CALLS》(http://blogs.unity3d.com/2015/12/23/1k-update-calls/)实现的,可以快上几十倍。MicroCoroutine会自动用于基于帧数的时间操作和ObserveEveryValueChanged。

如果你想要使用MicroCoroutine替代unity内置的协程,使用 或者 。

image

MicroCoroutine的局限是:仅支持 并且调用的时间是根据调用的方法来确定(, , ).。

如果和其他IObservable一起用,你可以检查完成属性比如isDone。

未完结,请关注“洪流学堂”公众号后续连载

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205A16D0800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券