UniRx第一季学习(二) ------ UniRx 的基本语法格式+Update
课程地址 :
凉鞋大大的,可以的话大家多支持一波~
一.UniRx 的基本语法格式
private void Start()
{
Observable.Timer(TimeSpan.FromSeconds(5.0f))
.Subscribe(_ =>
{
Debug.Log("do something");
});
}
Observable.XXX().Subscribe() 是⾮常典型的 UniRx 格式。
只要理解什么意思就可以看懂⼤部分的 UniRx 的⽤法了。
⾸先解决词汇问题:
Observable: 可观察的,形容词,形容后边的词(Timer) 是可观察的,我们可以粗暴地把 Observable 后
边的理解成发布者。
Timer: 定时器,名词,被 Observable 描述,
连起来则是:可被观察(监听)的.Timer().订阅()
顺下来应该是:订阅可被观察的定时器。
其概念关系很容易理解。
• Timer 是可观察的。
• 可观察的才能被订阅
Observable.XXX().Subscribe();
可被观察(监听)的 XX,注册。
以上从发布者和订阅者这个⻆度来进⾏的介绍,以便⼤家理解。
但是 UniRx 的侧重点,不是发布者和订阅者这两个概念如何使⽤,⽽是事件从发布者到订阅者之间的
过程如何处理。
所以两个点不重要,重要的是两点之间的线,也就是事件的传递过程。
二.独立的Update
在写代码的过程中经常会在MonoBehaviour 的 Update 中掺杂了⼤量互相⽆关的逻辑,导致代码⾮常不容易阅读
private void Update()
{
if (A)
{
...
}
}
代码冗⻓,⽽且⼲扰视线。UniRx 可以改善这个问题。
enum ButtonState
{
None,
Clicked,
DoubleClicked
}
void Start()
{
ButtonState buttonState = ButtonState.None;
bool buttonClicked = false;
// 监听鼠标左键
Observable.EveryUpdate()
.Subscribe(_ =>
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("left mouse button clicked");
buttonClicked = true;
}
});
// 监听鼠标右键
Observable.EveryUpdate()
.Subscribe(_ =>
{
if (Input.GetMouseButtonDown(1))
{
Debug.Log("right mouse button clicked");
buttonClicked = true;
}
});
// 监听状态
if (buttonClicked && buttonState == ButtonState.None)
{
buttonState = ButtonState.Clicked;
}
}