Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¡¡UniRx ¤ÎÄ󶡤¹¤ë ReactiveProperty ¤ÏÂçÊѶ¯ÎϤÇÊØÍø¤Êµ¡Ç½¤Ç¤¹¤¬¡¢Ãí°Õ¤¹¤Ù¤­ÅÀ¤â¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£

¡¡ÆäËÈóƱ´ü½èÍý¤Ë¤Ê¤ì¤Ê¤¤¤¦¤Á¤Ï¡¢¥¨¥é¡¼¤Î¸¶°ø¤È¤·¤Æ ReactiveProperty ¤¬ºîÍѤ·¤Æ¤¤¤ëÉôʬ¤¬¸«¤¨¤Ë¤¯¤¯¡¢¥¨¥é¡¼²ò·è¤¬¤Ç¤­¤Ë¤¯¤¤¤È¤¤¤¦Éôʬ¤â¤¢¤ê¤Þ¤¹¡£
Ê£¿ô¤Î¿Í¤¬·È¤ï¤ë¥×¥í¥¸¥§¥¯¥È¤È¤Ê¤ë¤È¡¢¤Ê¤ª¤µ¤éÈÑ»¨¤Ë¤Ê¤ê¤¬¤Á¤Ç¤¹¡£
¤Þ¤¿¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤ÎÍý²ò¤¬¿¼¤Þ¤é¤Ê¤¤¤È¡¢¤É¤Î¥¯¥é¥¹¤Ç¹ØÆɤµ¤ì¤Æ¤¤¤Æ¡¢¤É¤Î¥¿¥¤¥ß¥ó¥°¤ÇÆ°¤¤¤Æ¤¤¤ë¤Î¤«¤Ê¤É¡¢Ä̾ï¤Î½èÍý¤ËÈæ¤Ù¤Æ¤ï¤«¤ê¤¯¤¤µóÆ°¤â¿¤¤¤Ç¤¹¡£

¡¡½èÍý¤ÎÆâÍƤò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¤¿¾å¤Ç¡¢Å¬ÀÚ¤ÊÍÑË¡¤ÇÍøÍѤ·¤Æ¤¤¤¯¤³¤È¤¬µá¤á¤é¤ì¤Þ¤¹¡£



£±¡¥null ¥Á¥§¥Ã¥¯¤ÎÊýË¡


¡¡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 ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


£²¡¥CompositeDisposable ¤òÍøÍѤ·¤¿¾ì¹ç¤Î¹ØÆÉÄä»ß¤Î¥¿¥¤¥ß¥ó¥°


¡¡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 ¥¯¥é¥¹¤È¤ÎÊ»ÍÑ


¡¡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;
    }

¡¡¤³¤ì¤òÈò¤±¤ë¤è¤¦¤Ë¥³¡¼¥Ç¥£¥ó¥°¤·¤Þ¤·¤ç¤¦¡£


¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆ⤫¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆ⤫¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹