ºÇ½ª¹¹¿·¡§ orika_ex_miyako 2024ǯ04·î18Æü(ÌÚ) 09:01:14ÍúÎò
¡¡ÆäËÈóƱ´ü½èÍý¤Ë¤Ê¤ì¤Ê¤¤¤¦¤Á¤Ï¡¢¥¨¥é¡¼¤Î¸¶°ø¤È¤·¤Æ 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(); } protected void OnDestroy() { Dispose(); } }
¡¡Hp ¤ò¹ØÆɤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢²¼µ¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
private LifeBase myLife; // Hp ¤Î¹ØÆÉ myLife.Hp .Subscribe(hp => Debug.Log($"hp : {hp}") ¡¡¡¡.AddTo(myLife.Disposables);
¡¡AddTo ¤Î°ú¿ô¤ËÀè¤Û¤ÉºîÀ®¤·¤¿¥¯¥é¥¹Æâ¤Î CompositeDisposable ¤Î¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë¤³¤È¤Ç¹ØÆÉÄä»ß¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡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; }
¡¡¤³¤ì¤òÈò¤±¤ë¤è¤¦¤Ë¥³¡¼¥Ç¥£¥ó¥°¤·¤Þ¤·¤ç¤¦¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯