什么是属性响应器
ReactiveProperty<>
ReactiveDictionary<>
ReactiveCollection<>
ReactiveCommand<>
ReactiveProperty派生基础类型
什么是属性响应器
一般来说,我们需要对一个数据进行监听的时候,使用回调来通知其变化之后的结果;
因此,我们在编写回调的时候会比较谨慎,回调的数据存在必要的需求;
有些时候我们需要判断一个数据的变化结果,然而结果只是当下用到,不要定义回调给第三方需求来使用,
那么,一般的处理方式和回调都不是很好的解决方法,类如:判断一个敌人是否死亡了;
你的做法是,大致以下几种:在Update方法里面来判定,使用Manager来管理,其本质和Update差不多;
使用回调来通知其结果?
使用UniRx,万物都是观察者对象,可以很好的解决这类数据及时刷新通知结果的需求,
在UniRx中判定敌人死亡的一个处理方式:
public class No18_RxProperty : MonoBehaviour
{
private bool mIsDead;
void Start()
{
ReactiveProperty<int> hp = new IntReactiveProperty(100);
hp.Subscribe(Next, Error, Complete);
Observable.EveryUpdate().Subscribe(_ =>
{
if (mIsDead == false) hp.Value -= 1;
});
}
void Next(int hp)
{
mIsDead = hp < 1;
Debug.LogFormat("isDead:{0}", mIsDead);
}
void Error(Exception ex)
{
Debug.LogException(ex);
}
void Complete()
{
Debug.LogFormat("Complete");
}
}
ReactiveProperty 轻量级属性响应器
ReactiveProperty是所有基础类型属性响应器的基类
使用方法
// 构建属性响应器
ReactiveProperty<int> hp = new ReactiveProperty<int>();
// 设置默认值
hp.Value = 100;
// 订阅通知结果
hp.Subscribe(Next, Error, Complete);
其中T可以指定任意类型
默认值可以在构建的时候设置
输出结果
代码示例
public class No18_RxProperty : MonoBehaviour
{
private bool mIsDead;
void Start()
{
// 构建属性响应器
ReactiveProperty<int> hp =