public ReactiveProperty<int> Age = new ReactiveProperty<int>(0);// 对变量//IntReactiveProperty//ReactiveCollection //对集合voidStart(){
Age.Subscribe((age)=>{
Debug.LogError("值改变了Start"+ age);});
Age.Value =20;
PersonView personView = new PersonView(this);}
public class PersonView
{
_03 _03;
public PersonView(_03 _03){
this._03 = _03;
_03.Age.Subscribe((age)=>{
Debug.LogError("值改变了Init"+ age);});}}
MVP
public Text text;
public Button btn;[SerializeField] private PersonModel personModel = new PersonModel(200);voidStart(){
btn.OnClickAsObservable().Subscribe(_ =>{
personModel.hp.Value -=99;});
personModel.hp.SubscribeToText(text);
personModel.isDead.Where(isDead => isDead).Select(isDead =>!isDead).SubscribeToInteractable(btn);}[Serializable]
public class PersonModel
{
public ReactiveProperty<long> hp;
public IReadOnlyReactiveProperty<bool> isDead;
public PersonModel(long initHp){
hp = new ReactiveProperty<long>(initHp);
isDead = hp.Select(hp => hp <=0).ToReactiveProperty();}}
Merge
合并 EveryUpdate
var leftMouseClickStream = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0));
var RightMouseClickStream = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(1));
Observable.Merge(leftMouseClickStream, RightMouseClickStream).Subscribe(_ =>{
Debug.LogError("点击了");});
合并 Button
var OButtonA = m_ButtonA.OnClickAsObservable().Select(_=>"A");
var OButtonB = m_ButtonB.OnClickAsObservable().Select(_ =>"B");
var OButtonC = m_ButtonC.OnClickAsObservable().Select(_ =>"C");
Observable.Merge(OButtonA, OButtonB, OButtonC).First().Subscribe(id =>{
Debug.LogError("##"+id);});
voidStart(){//StartCoroutine(Delay1Second());
var Delay2 = Observable.FromCoroutine(_ =>Delay2Second());
var Delay1 = Observable.FromCoroutine(_ =>Delay1Second());
Observable.WhenAll(Delay2, Delay1).Subscribe(_ =>{
Debug.LogError("运行了");});}
IEnumerator Delay1Second(){
yield return Observable.Timer(TimeSpan.FromSeconds(1.0f)).ToYieldInstruction();
Debug.LogError("Delay1Second");}
IEnumerator Delay2Second(){
yield return new WaitForSeconds(1.0f);
Debug.LogError("Delay2Second");}
WhenAll并行EveryUpdate
var left = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0)).First();
var right = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(1)).First();
Observable.WhenAll(left, right).Subscribe(id =>{
Debug.LogError(id.Length);});