ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2024ǯ10·î23Æü(¿å) 09:03:51ÍúÎò
¡¡ÆäËÈóƱ´ü½èÍý¤Ë¤Ê¤ì¤Ê¤¤¤¦¤Á¤Ï¡¢¥¨¥é¡¼¤Î¸¶°ø¤È¤·¤Æ ReactiveProperty ¤¬ºîÍѤ·¤Æ¤¤¤ëÉôʬ¤¬¸«¤¨¤Ë¤¯¤¯¡¢¥¨¥é¡¼²ò·è¤¬¤Ç¤¤Ë¤¯¤¤¤È¤¤¤¦Éôʬ¤â¤¢¤ê¤Þ¤¹¡£
Ê£¿ô¤Î¿Í¤¬·È¤ï¤ë¥×¥í¥¸¥§¥¯¥È¤È¤Ê¤ë¤È¡¢¤Ê¤ª¤µ¤éÈÑ»¨¤Ë¤Ê¤ê¤¬¤Á¤Ç¤¹¡£
¤Þ¤¿¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤ÎÍý²ò¤¬¿¼¤Þ¤é¤Ê¤¤¤È¡¢¤É¤Î¥¯¥é¥¹¤Ç¹ØÆɤµ¤ì¤Æ¤¤¤Æ¡¢¤É¤Î¥¿¥¤¥ß¥ó¥°¤ÇÆ°¤¤¤Æ¤¤¤ë¤Î¤«¤Ê¤É¡¢Ä̾ï¤Î½èÍý¤ËÈæ¤Ù¤Æ¤ï¤«¤ê¤¯¤¤µóÆ°¤â¿¤¤¤Ç¤¹¡£
¡¡½èÍý¤ÎÆâÍƤò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¤¿¾å¤Ç¡¢Å¬ÀÚ¤ÊÍÑË¡¤ÇÍøÍѤ·¤Æ¤¤¤¯¤³¤È¤¬µá¤á¤é¤ì¤Þ¤¹¡£
¡¡ReactiveProperty ¤Ï¡¢ÃÍ·¿¤Þ¤¿¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¶ñÂÎŪ¤Ë¤Ï¡¢¥¸¥§¥Í¥ê¥Ã¥¯¤ÊÀ¼Á¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤É¤ó¤Ê·¿¤Ç¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢int ¤ä float ¤Ê¤É¤ÎÃÍ·¿¤À¤±¤Ç¤Ê¤¯¡¢string ¤ä object¡¢ GameObject¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤Î»²¾È·¿¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<int>¤ÏÃÍ·¿¤Ç¤¢¤ë int ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¤¬¡¢
ReactiveProperty<string>¤Ï»²¾È·¿¤Ç¤¢¤ë string ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤ì¤¾¤ì¤Î ReactiveProperty ¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢¤½¤Î·¿¤Ë±þ¤¸¤¿Ãͤò»ý¤Á¤Þ¤¹¡£
¡¡ReactiveProperty¤¬ÃÍ·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°ìÊý¡¢»²¾È·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡C# ¤ÎÃÍ·¿¡Êint¡¢float¡¢bool¤Ê¤É¡Ë¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢Ä̾ï¤Ï null ¥Á¥§¥Ã¥¯¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
ÃÍ·¿¤Ï null ¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¤¿¤á¤Ç¤¹¡£(null µöÍÆ·¿¤Ç¤¢¤ë¾ì¹ç¤ò½ü¤¤Þ¤¹)
¡¡¤Ç¤¹¤¬¡¢»²¾È·¿¤Î¥×¥ê¥ß¥Æ¥£¥Ö·¿(string¡¢object ¤Ê¤É)¤Ç¤¢¤Ã¤¿¤ê¡¢GameObject ¤ä¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¤Ë¤Ï¡¢null ¥Á¥§¥Ã¥¯¤¬É¬Íפˤʤê¤Þ¤¹¡£
»²¾È·¿¤ÎÊÑ¿ô¤Ï null ¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<Rigidbody>¤Î¤è¤¦¤Ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¤Î¥¯¥é¥¹¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢
Rigidbody ¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ReactiveProperty¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼«ÂΤ¬ null ¤Ç¤¢¤ë¤³¤È¤â¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡Ä̾ï¤ÎÊÑ¿ô¤È ReactiveProperty¤Î°ã¤¤¤Ï¡¢ReactiveProperty¤Ï¥¯¥é¥¹¤Ç¤¢¤ê¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ëÅÀ¤Ç¤¹¡£
¤½¤Î¾ì¹ç¡¢ReactiveProperty¤Înull¥Á¥§¥Ã¥¯¤Ï¼¡¤Î¤è¤¦¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
public class Test_A { public int count; } public class Test_B { public ReactiveProperty<Test_A> TestProperty = new(); void Start() { if (TestProperty == null || TestProperty .Value == null) { return; } } }
¡¡¤³¤Î¤è¤¦¤Ë¡¢TestProperty ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢
¤½¤Î¸å¤Ë TestProperty.Value ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢Àµ¤·¤¯ null ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡UniRx ¤Î½èÍý¤Ï AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤ò¹Ô¤¦¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¤¿¤À¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ê¤É¤òÊ»ÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢AddTo ¤Çɳ¤Å¤¤¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Ç˲õ¤µ¤ì¤Ê¤¤¤¿¤á¡¢¹ØÆÉÄä»ß¤¬¹Ô¤ï¤ì¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢ÊÌÅÓ¡¢Dispose ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¤½¤ÎºÝ¡¢CompositeDisposable ¤òÍøÍѤ·¤ÆÊ£¿ô¤Î UniRx ¤ä ReactiveProperty ¤ò´Æ»ë¤·¤Æ¤¤¤ë¾ì¹ç¡¢
CompositeDisposable ¤Ï°ìÅÙ Dispose ¤¹¤ë¤ÈƱ¤¸¥¹¥È¥ê¡¼¥à¤Ç¤Ï¹ØÆɤ¬ºÆ³«¤µ¤ì¤Þ¤»¤ó¡£
¡¡¹ØÆɽèÍý¤òºÆ³«¤µ¤»¤ëͽÄ꤬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢Clear ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤¹¤ë¤«¡¢Ã±ÂΤÇÄä»ß¤Ç¤¤ë¤è¤¦¤Ë IDisposable ·¿¤òÍøÍѤ·¤Þ¤·¤ç¤¦¡£
¤¢¤ë¤¤¤Ï¿·¤·¤¤¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤·¤ÆÍøÍѤ·¤Æ¤¤¤¯ÊýË¡¤òºÎÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
¡¡¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£
using UniRx; using UnityEngine; /// <summary> /// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹ /// </summary> public class LifeBase { public ReactiveProperty<int> Hp = new(); protected int maxHp; protected readonly CompositeDisposable disposables = new(); public CompositeDisposable Disposables { get => disposables; set => disposables.Add(value); } protected void Dispose() { // Dispose ¤Ç¤Ï¤Ê¤¯ Clear ¤Ç¹ØÆɤòÄä»ß¤¹¤ë disposables.Clear(); ¡¡¡¡¡¡¡¡// ¤¢¤ë¤¤¤Ï¿·¤·¤¤¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤¹¤ë ¡¡¡¡¡¡¡¡disposables = new(); } protected void OnDestroy() { Dispose(); } }
¡¡Hp ¤ò¹ØÆɤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢²¼µ¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
private LifeBase myLife; // Hp ¤Î¹ØÆÉ myLife.Hp .Subscribe(hp => Debug.Log($"hp : {hp}") ¡¡¡¡.AddTo(myLife.Disposables);
¡¡AddTo ¤Î°ú¿ô¤ËÀè¤Û¤ÉºîÀ®¤·¤¿¥¯¥é¥¹Æâ¤Î CompositeDisposable ¤Î¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë¤³¤È¤Ç¹ØÆÉÄä»ß¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡ReactiveProperty ¤ËÂФ·¤ÆÂåÆþ½èÍý¤ò¹Ô¤¦¾ì¹ç¡¢±¦Êդ˺¸ÊÕ¤ÈƱ¤¸ ReactiveProperty ¤òÍøÍѤ·¤Æ¤·¤Þ¤¦¤È¡¢2²óʬ¤Î¹ØÆɽèÍý¤¬Æ°¤¤Þ¤¹¡£
public ReactiveProperty<int> Hp = new(); void Start() { Hp.Value = 10; Hp.Value = Hp.Value + 10; }
¡¡¤½¤Î¤¿¤á Mathf ¥¯¥é¥¹¤Ê¤É¤Ë ReactiveProperty ¤ò°ì½ï¤ËÍøÍѤ¹¤ë¾ì¹ç¡¢¤½¤Î°ú¿ôÆâ¤Ë ReactiveProperty ¤òÍøÍѤ¹¤ë¤È¹ØÆɽèÍý¤¬Ê£¿ô²óÆ°¤¤Þ¤¹¡£
¡¡Î㤨¤Ð Mathf.Clamp ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢ReactiveProperty ¤òÀ©¸ÂÃÍÆâ¤Ë¼ý¤á¤¿¤¤¾ì¹ç¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤ÇÂåÆþ½èÍý¤ò¶´¤ó¤Ç¤·¤Þ¤¦¤È
ReactiveProperty ¤Î·×»»½èÍý¤Î»þÅÀ¤Ç1²ó¹ØÆɤµ¤ì¡¢¤µ¤é¤Ë¤½¤ÎÃͤ¬ Clamp ¤ÎÀ©¸ÂÃͤòĶ¤¨¤¿¾ì¹ç¤Ë¤Ï¿ôÃͤ¬ºÆÅÙ¹¹¿·¤µ¤ì¤ë¤¿¤á¡¢
¤â¤¦1²ó¹ØÆɽèÍý¤¬Æ°¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢Í½´ü¤·¤Æ¤¤¤Ê¤¤ÃͤǤιØÆɽèÍý¤¬¹Ô¤ï¤ì¤ë²ÄǽÀ¤¬¹â¤¤¤¿¤á¡¢
¡°ìÅÙ¡¢¥í¡¼¥«¥ëÊÑ¿ô¤òºîÀ®¤·¡¢¤½¤ÎÃͤò Mathf ¥¯¥é¥¹¤ÇÀ©¸Â¤·¤Æ¤«¤é ReactiveProperty ¤ËÂåÆþ¤¹¤ë¤è¤¦¤Ë¤¹¤ë
¢¤¢¤ë¤¤¤Ï¡¢Clamp Æâ¤Ç¤Ï ReactiveProperty ¤ËÂåÆþ½èÍý¤·¤Ê¤¤(¡Ü¡á¤Ç½èÍý¤·¤Ê¤¤)¤³¤È¤Ç°ÂÁ´¤Ë±¿ÍѤǤ¤Þ¤¹¡£
using UniRx; using UnityEngine; /// <summary> /// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹ /// </summary> public class LifeBase : MonoBehaviour { public ReactiveProperty<int> Hp = new(); protected int maxHp; /// <summary> /// ½é´üÀßÄê /// </summary> /// <param name="initHp"></param> protected virtual void SetUpLife(int initHp) { Hp.Value = initHp; maxHp = initHp; } /// <summary> /// Hp ·×»»½èÍý /// À¸Â¸È½ÄêÉÕ /// </summary> /// <param name="amount"></param> /// <returns></returns> public virtual bool CalcLife(int amount, int effectIndex, string seType) { ¡¡¡¡¡¡¡¡// ¡¡Ý£±¡¡¥í¡¼¥«¥ëÊÑ¿ô¤Ë ReactiveProperty ¤òÂåÆþ¤·¡¢Ä¾ÀÜ·×»»¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë int hp = Hp.Value; // ¡¡Ý£²¡¡hp ¤Î·×»»¤ò Clamp ¤ÇÀ©¸Â¤¹¤ë¤³¤È¤Ç¡¢Value ¤Ø¤ÎÂåÆþ¤ò1²ó¤À¤±¤Ë¤¹¤ë Hp.Value = Mathf.Clamp(hp += amount, 0, maxHp); // ¢¤¢¤ë¤¤¤Ï¡¢¡Ü ¤Î¤ß¤Ç²Ã»»¤¹¤ë(ÂåÆþ½èÍý¤ò¶´¤Þ¤Ê¤¤) Hp.Value = Mathf.Clamp(Hp.Value + amount, 0, maxHp); return Hp.Value > 0; } }
¡¡²¼µ¤Î¤è¤¦¤Ë½èÍý¤ò½ñ¤¯¤È¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤Ç ReactiveProperty ¤Î¹ØÆɽèÍý¤¬2²ó¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡
public virtual bool CalcLife(int amount, int effectIndex, string seType) { ¡¡¡¡¡¡¡¡// ReactiveProperty ¤Î·×»»¤òľÀÜ Clamp Æâ¤Ç¹Ô¤¦¤È¡¢Âè1°ú¿ô¤Î·×»»»þ¤Ë1²ó¡¢Clamp ¤ÎÀ©¸Â»þ¤Ë1²ó¡¢¹ØÆɽèÍý¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ë Hp.Value = Mathf.Clamp(Hp.Value += amount, 0, maxHp); return Hp.Value > 0; }
¡¡¤³¤ì¤òÈò¤±¤ë¤è¤¦¤Ë¥³¡¼¥Ç¥£¥ó¥°¤·¤Þ¤·¤ç¤¦¡£
¡¡ReactiveProperty<T>¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¡ÖHot Observable¡×¤È¤·¤ÆÆ°ºî¤·¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢Subscribe¤ò¸Æ¤Ó½Ð¤·¤¿»þÅÀ(ÀßÄꤷ¤¿»þÅÀ)¤Ç¡¢¸½ºß¤ÎÃͤ¬¹ØÆɤµ¤ì¤Þ¤¹¡£
ReactiveProperty<T>¤Ï½é´üÃͤò»ý¤Ã¤Æ¤ª¤ê¡¢¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤ë¤È¨ºÂ¤Ë¤½¤Î½é´üÃͤò¹ØÆɼԤËÄÌÃΤ·¤Þ¤¹¡£¤³¤Î¤¿¤á¡¢¡ÖCold ¾õÂ֡פǥ¹¥¿¡¼¥È¤¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¡¡³Îǧ¤Î¤¿¤á¡¢°Ê²¼¤Î¥³¡¼¥É¤ò¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£
using UnityEngine; using UniRx; public class ReactiveExample : MonoBehaviour { // ReactiveProperty¤Î½é´ü²½ private ReactiveProperty<long> remainGold = new ReactiveProperty<long>(); private void Start() { // ReactiveProperty¤ÎÃͤËÂФ·¤Æ¹ØÆÉ remainGold.Subscribe(value => Debug.Log("Value changed to: " + value)); } private void Update() { // ¥¹¥Ú¡¼¥¹¥¡¼¤¬²¡¤µ¤ì¤¿¤éReactiveProperty¤ÎÃͤòÊѹ¹ if (Input.GetKeyDown(KeyCode.Space)) { remainGold.Value += 10; } } }
¡¡¾åµ¤Î¥³¡¼¥É¤Ç¤Ï¡¢Start ¥á¥½¥Ã¥É¤Ç¹ØÆɤòÀßÄꤷ¤Æ¤¤¤Þ¤¹¤¬¡¢Subscribe¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤¿Ä¾¸å¤Ë Console ¥Ó¥å¡¼¤Ë¡ÖValue changed to: 0¡×¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£
¤³¤ì¤Ï¡¢ReactiveProperty<long>¤¬½é´üÃÍ 0 ¤ò»ý¤Ã¤Æ¤¤¤ë¤¿¤á¡¢¤½¤Î½é´üÃͤ¬Â¨ºÂ¤Ë¹ØÆɼԤËÄÌÃΤµ¤ì¤ë¤¿¤á¤Ç¤¹¡£
¡¡ Update¥á¥½¥Ã¥É¤Ç¥¹¥Ú¡¼¥¹¥¡¼¤¬²¡¤µ¤ì¤¿¤éremainGold¤ÎÃͤò10¤º¤ÄÁý²Ã¤µ¤»¤Þ¤¹¡£
¤½¤Î¥¿¥¤¥ß¥ó¥°¤Ç Console ¥Ó¥å¡¼¤Ë ¡ÖValue changed to: 10¡×¡ÖValue changed to: 20¡×¤Î¤è¤¦¤Ë¡¢1²ó¤º¤Ä¥í¥°¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£
¡¡¤Þ¤È¤á¤ë¤È¡¢ReactiveProperty<T>¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¡ÖHot Observable¡×¤È¤·¤ÆÆ°ºî¤·¡¢Subscribe¤ò¸Æ¤Ó½Ð¤·¤¿»þÅÀ¤Ç¸½ºß¤ÎÃͤò¨ºÂ¤Ë¹ØÆɼԤËÄÌÃΤ·¤Þ¤¹¡£
¤½¤·¤Æ¹ØÆɽèÍý¤¬½é´üÃͤÇ1²ó¹Ô¤ï¤ì¤Þ¤¹¡£
¡¡using UniRx; ¤ÈÀë¸À¤¹¤ë¤³¤È¤Ç ReactiveProperty<T> ¤ä¡¢¤½¤ì°Ê³°¤Î¥é¥¤¥Ö¥é¥ê¤Îµ¡Ç½¤òÍøÍѤǤ¤Þ¤¹¡£
¡¡Unity ¤Ç¤Ï¤Ê¤¤ C# ¤Î¾ì¹ç¡¢using Reactive.Bindings; ¤ÎÀë¸À¤ò¹Ô¤¤¤Þ¤¹¡£
ReactiveProperty<T>¤ò´Þ¤àReactive.Bindings¥é¥¤¥Ö¥é¥êÁ´ÂΤò¥¤¥ó¥Ý¡¼¥È¤¹¤ë¤¿¤á¤ÎÀë¸À¤Ç¤¹¡£
using Reactive.Bindings; ¤òÀë¸À¤¹¤ë¤³¤È¤Ç¡¢²¼µ¤Îµ¡Ç½¤¬ÍøÍѲÄǽ¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Î̾Á°¶õ´Ö¤Ë¤ÏReactiveProperty<T>°Ê³°¤Ë¤â¡¢°Ê²¼¤Î¤è¤¦¤Ê¤µ¤Þ¤¶¤Þ¤Ê¥¯¥é¥¹¤ä¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡§
ReactiveCommand¡§¥³¥Þ¥ó¥É¤Î¥ê¥¢¥¯¥Æ¥£¥Ö½èÍý¤ò¥µ¥Ý¡¼¥È¡£ ReadOnlyReactiveProperty<T>¡§Æɤ߼è¤êÀìÍѤΥꥢ¥¯¥Æ¥£¥Ö¥×¥í¥Ñ¥Æ¥£¡£ ReactiveCollection<T>¡§¥³¥ì¥¯¥·¥ç¥ó¤¬Êѹ¹¤µ¤ì¤¿¤È¤¤ËÄÌÃΤò¼õ¤±¤ë¤¿¤á¤Î¥¯¥é¥¹¡£ ³Æ¼ï³ÈÄ¥¥á¥½¥Ã¥É¡§Observable¤ÎÊÑ´¹¤äÁàºî¤Ë»ÈÍѤ¹¤ë¤â¤Î¤Ê¤É¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯