本文译者:郑洪智 - 你的技术探路者
翻译日期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。
未完结,请关注“洪流学堂”公众号后续连载
领取专属 10元无门槛券
私享最新 技术干货