美文网首页Unity技术分享Unity教程合集
[译] ReactiveX 与 Unity3D <二.2&

[译] ReactiveX 与 Unity3D <二.2&

作者: binyu1231 | 来源:发表于2017-09-02 00:09 被阅读29次

原文链接

我想为这个系列之前的一篇文章做一些补充。此前我们添加了一个按住 Shift 可以奔跑的效果。有些游戏则是使用 Shift 键来切换走跑状态的。通过我们的 Observable 控制器可以非常简单的完成修改。

基于信号架构的一个好处是,我们可以只改变信号的产生,而不用修改响应信号的代码。我们原来定义的 Run 信号是这样的:

Run = this.UpdateAsObservable()
  .Select(_ => Input.GetButton("Fire3"))
  .ToReadOnlyReactiveProperty();

每一次 Update, 如果 Shift (“Fire3” 输入轴)被按下 Run 就返回 true, 否则就返回 false。(仅仅是为了使用方便,我们将它转化成了响应式属性)

将其改变被按键切换状态就像下面这样简单:

var runValue = false;
Run = this.UpdateAsObservable()
  .Where(_ => Input.GetButtonDown("Fire3"))
  .Do(_ => runValue = !runValue)
  .Select(_ => runValue)
  .ToReadOnlyReactiveProperty();

runValue 是使用了闭包特性的状态。在每次 Shift 按钮被按下的 Update, 我们将 runValue 取反并重新赋值。此处的 Do 方法不是必须要有的;我们完全可以将 Do 中的函数移到 Select 中执行。然而 Do 明确指出有一些副作用正在发生。就像在这个例子中,状态值被操纵了,这就可以作为你的程序员伙伴的警告标志(也包括未来的你)。

当然你必须要小心没有其他地方会引用 runValue, 所以你可能希望通过将它隐藏在特定的函数中,来保护它。

最重要的是,除了那些负责生成运行信号的代码,我们没有改变任何其他任何一行代码。那些没有修改的代码也依然能按照预期运行!

相关文章

  • [译] ReactiveX 与 Unity3D <二.2&

    原文链接 第一篇 第二篇 第二篇附加篇 第三篇 我想为这个系列之前的一篇文章做一些补充。此前我们添加了一个按住 S...

  • [译] ReactiveX 与 Unity3D <二.1&

    原文链接 第一篇 第二篇 第二篇附加篇 第三篇 这是三部曲的第二篇。使用 ReactiveX 实现 Unity 标...

  • [译] ReactiveX 与 Unity3D <一>

    原文链接 第一篇 第二篇 第二篇附加篇 第三篇 耦合性强的代码令人头痛。一定是有某种自然力量,像重力那样,拽着代码...

  • [译] ReactiveX 与 Unity3D <三>

    原文链接 第一篇 第二篇 第二篇附加篇 第三篇 本系列的最后一篇文章。我们将会为玩家控制器添加跳跃功能及其声音的播...

  • RxJava3.x学习记录

    RxJava3.x基本用法 1. 概述 1.1 ReactiveX与RxJava RxJava是ReactiveX...

  • Unity3D shader

    1.【译】Unity3D Shader 新手教程(5/6) —— Bumped Diffuse Shader ht...

  • Rxjava使用入门

    什么是 ReactiveX?    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API...

  • unity3d优化总结篇

    unity3d优化总结篇(一)unity3d优化总结篇(二)

  • RxJava

    ReactiveX ReactiveX is a library for composing asynchrono...

  • ReactiveX 入门系列(一)

    目的 了解 ReactiveX 是什么? 了解 ReactiveX 优劣势? ReactiveX 中常用的概念? ...

网友评论

    本文标题:[译] ReactiveX 与 Unity3D <二.2&

    本文链接:https://www.haomeiwen.com/subject/wzqvdxtx.html