1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // for uGUI(from 4.6)
- #if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5)
- using System;
- using UnityEngine;
- using UnityEngine.UI;
- namespace UniRx.Examples
- {
- public class Sample12_ReactiveProperty : MonoBehaviour
- {
- // Open Sample12Scene. Set from canvas
- public Button MyButton;
- public Toggle MyToggle;
- public InputField MyInput;
- public Text MyText;
- public Slider MySlider;
- // You can monitor/modifie in inspector by SpecializedReactiveProperty
- public IntReactiveProperty IntRxProp = new IntReactiveProperty();
- Enemy enemy = new Enemy(1000);
- void Start()
- {
- // UnityEvent as Observable
- // (shortcut, MyButton.OnClickAsObservable())
- MyButton.onClick.AsObservable().Subscribe(_ => enemy.CurrentHp.Value -= 99);
- // Toggle, Input etc as Observable(OnValueChangedAsObservable is helper for provide isOn value on subscribe)
- // SubscribeToInteractable is UniRx.UI Extension Method, same as .interactable = x)
- MyToggle.OnValueChangedAsObservable().SubscribeToInteractable(MyButton);
-
- // input shows delay after 1 second
- #if !(UNITY_4_6 || UNITY_4_7 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2)
- MyInput.OnValueChangedAsObservable()
- #else
- MyInput.OnValueChangeAsObservable()
- #endif
- .Where(x => x != null)
- .Delay(TimeSpan.FromSeconds(1))
- .SubscribeToText(MyText); // SubscribeToText is UniRx.UI Extension Method
- // converting for human visibility
- MySlider.OnValueChangedAsObservable()
- .SubscribeToText(MyText, x => Math.Round(x, 2).ToString());
- // from RxProp, CurrentHp changing(Button Click) is observable
- enemy.CurrentHp.SubscribeToText(MyText);
- enemy.IsDead.Where(isDead => isDead == true)
- .Subscribe(_ =>
- {
- MyToggle.interactable = MyButton.interactable = false;
- });
- // initial text:)
- IntRxProp.SubscribeToText(MyText);
- }
- }
- // Reactive Notification Model
- public class Enemy
- {
- public IReactiveProperty<long> CurrentHp { get; private set; }
- public IReadOnlyReactiveProperty<bool> IsDead { get; private set; }
- public Enemy(int initialHp)
- {
- // Declarative Property
- CurrentHp = new ReactiveProperty<long>(initialHp);
- IsDead = CurrentHp.Select(x => x <= 0).ToReactiveProperty();
- }
- }
- }
- #endif
|