i-school - ¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý¤ÎºîÀ®Îã­£

°ìÄê¤Î»þ´Ö¤¬·Ð²á¤¹¤ë¤È¥¤¥Ù¥ó¥È½àÈ÷¤¬À°¤¦¥±¡¼¥¹


¡¡Á°²ó¤Î³¤­¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡UniTask¤ÈUniRx¤ò»ÈÍѤ·¤Æ Final Fantasy¤ÎATB¥²¡¼¥¸¤Î¤è¤¦¤Ê¡¢°ìÄê»þ´Ö¤¬·Ð²á¤¹¤ë¤È¥¤¥Ù¥ó¥È¤Î½àÈ÷¤¬À°¤¦¥·¥¹¥Æ¥à¤ò¼ÂÁõ¤¹¤ëÎã¤Ç¤¹¡£
¤³¤³¤Ç¤Ï¥Ü¥¿¥ó¤¬²¡¤»¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£


¡ã¼ÂÁõÆ°²è¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯


À߷פȳµÍ×


¡¡º£²ó¤ÏÁ°²óºîÀ®¤·¤¿£±¤Ä¤Î¥¯¥é¥¹¤ò MVP ¥Ñ¥¿¡¼¥ó¤òÍøÍѤ·¤Æ¡¢£³¤Ä¤Î¥¯¥é¥¹¤òʬ³ä¤·¤Þ¤¹¡£

¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤Î³Ø½¬¤Ë¤â¤Ê¤ê¤Þ¤¹¡£
¡¡

¸µ¤È¤Ê¤ë¥¯¥é¥¹


¡¡Á°²ó¤Î¼ê½ç¤ÇºîÀ®¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Ç¤¹¡£


ATBController.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£



MVP ¥Ñ¥¿¡¼¥ó¤Ç¤Î¼ÂÁõ


¡¡ATBController¥¯¥é¥¹¤ÏMVP(MV(R)P)¥Ñ¥¿¡¼¥ó¤Ç3¤Ä¤Î¥¯¥é¥¹¤Ë°ú¤­·Ñ¤°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
MVP¥Ñ¥¿¡¼¥ó¤Ç¤Ï¡¢Model¡¢View¡¢Presenter¤Î3¤Ä¤ÎÌò³ä¤Ë°ú¤­·Ñ¤°¤³¤È¤Ç¡¢¥¯¥é¥¹¤ÎÀÕǤ¤òÌÀ³Î¤Ë¤·¡¢¤½¤ì¤¾¤ì¤ÎÀÕǤ¤òʬΥ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¡¦ATBModel¡§ATBÃͤä²óÉü®Å٤ʤɤΥǡ¼¥¿¤òÊÝ»ý¤·¡¢²Ã¹©¤¹¤ë¥¯¥é¥¹

¡¡¡¦ATBView¡§ATB¥²¡¼¥¸¤ä¹¶·â¥Ü¥¿¥ó¤Ê¤É¤ÎUIɽ¼¨¡¢¥æ¡¼¥¶¡¼¤«¤é¤ÎÆþÎϤò½èÍý¤¹¤ë¥¯¥é¥¹

¡¡¡¦ATBPresenter¡§ATBModel¤ÈATBView¤ÎÃç²ðÌò¤È¤·¤Æ¡¢¥Ç¡¼¥¿¤Î¼èÆÀ¤ä²Ã¹©¡¢UI¤Î¹¹¿·¤ò¹Ô¤¦¥¯¥é¥¹

¡¡ATBModel¤ÏATB¤Î¥Ç¡¼¥¿¤È¥í¥¸¥Ã¥¯¤ò»ý¤Á¡¢ATBPresenter¤ÏATBModel¤ÈATBView¤ÎξÊý¤ÈÄÌ¿®¤·¡¢¥Ó¥å¡¼¤Î¹¹¿·¤ò¹Ô¤¤¤Þ¤¹¡£
ATBView¤ÏUI¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò»ý¤Á¡¢ATB¤Î¾õÂÖ¤ò¥Ó¥å¡¼¤Ëɽ¼¨¤·¤Þ¤¹¡£



¡¡¶ñÂÎŪ¤ÊÌò³äʬô¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

¡¡¡¦ATBModel¡§¥²¡¼¥à¥·¥¹¥Æ¥à¤Î¿Ê¹Ô¤Ë´Ø¤¹¤ë½èÍý¤òôÅö¤·¡¢ATB¥²¡¼¥¸¤Î¸½ºß¤ÎÃͤò¹¹¿·¤·¤¿¤ê¡¢¹¶·â¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¹¹¿·¤·¤¿¤ê¤¹¤ë

¡¡¡¦ATBView¡§UI¤Îɽ¼¨¡¦Áàºî¤Ë´Ø¤¹¤ë½èÍý¤òôÅö¤·¡¢ATB¥²¡¼¥¸¤Îɽ¼¨¤ò¹¹¿·¤·¤¿¤ê¡¢¹¶·â¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿»þ¤Î½èÍý¤ò¼Â¹Ô¤¹¤ë

¡¡¡¦ATBPresenter¡§Model¤ÈView¤Î¶¶ÅϤ·¤òôÅö¤·¡¢Model¤«¤éView¤Ë¥Ç¡¼¥¿¤òÅϤ·¤¿¤ê¡¢View¤«¤éModel¤Ë¥¤¥Ù¥ó¥È¤òÅÁ¤¨¤¿¤ê¤¹¤ë¤³¤È¤Ç¡¢Model¤ÈView¤òÁ·ë¹ç¤ËÊݤÄ



¡¡¾åµ­¤ÇÄ󼨤·¤¿¤è¤¦¤Ë¡¢ATBController¥¯¥é¥¹¤òMVP¥Ñ¥¿¡¼¥ó¤Ç3¤Ä¤Î¥¯¥é¥¹¤Ëʬ¤±¤ë¤³¤È¤Ç¡¢³Æ¥¯¥é¥¹¤ÎÌò³ä¤òÌÀ³Î¤Ëʬ¤±¤Æ¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Þ¤¿¡¢MVP¥Ñ¥¿¡¼¥ó¤òºÎÍѤ¹¤ë¤³¤È¤Ç¡¢³Æ¥¯¥é¥¹¤òÁ·ë¹ç¤ËÊݤÁ¡¢½ÀÆð¤Ê³ÈÄ¥À­¤ò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤½¤ÎºÝ¤Ë¤Ï UniRx¤ò»ÈÍѤ·¤Æ¥Ç¡¼¥¿¤Îή¤ì¤òÌÀ³Î¤Ë¤·¡¢¥³¡¼¥É¤ÎÆɤߤ䤹¤µ¤äÊݼéÀ­¤ò¸þ¾å¤µ¤»¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à¥·¥¹¥Æ¥à¤Î¿Ê¹Ô¤ÈUI¤Îɽ¼¨¡¦Áàºî¤òʬΥ¤·¡¢½ÀÆð¤Ë³ÈÄ¥¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤½¤ì¤Ç¤Ï³Æ¥¯¥é¥¹¤Î¼ÂÁõÎã¤Ç¤¹¡£


ATBModel


¡¡MonoBehaviour ¤ò·Ñ¾µ¤·¤¿·Á¤Ç¤ÎºîÀ®¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
¼¡¤Î¼ê½ç¤Ç¤Ï MonoBehaviour ¤ò·Ñ¾µ¤·¤Ê¤¤·Á¤Ç¤ÎºîÀ®¤ò¹Ô¤¦¤¿¤á¡¢¤³¤³¤Ç¤Ïʬ¤«¤ê¤ä¤¹¤¯¥¯¥é¥¹Ì¾¤òʬ¤±¤Æ¤¤¤Þ¤¹¡£

¡¡º£²ó¤ÏÀÜÈø¤Ë Mono ¤ò¤Ä¤±¤ë¤³¤È¤Ç¡¢MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤ë Model ¥¯¥é¥¹¤Ç¤¢¤ë¤³¤È¤òÌÀ¼¨Åª¤Ë¤·¤Æ¤¤¤Þ¤¹¡£


ATBModel_Mono.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




¡¡Model ¥¯¥é¥¹¤Ç´ÉÍý¤¹¤ëÊÑ¿ô¤Î¾ðÊó¤Ï¡¢Presenter ¤è¤ê¼õ¤±¼è¤Ã¤ÆÍøÍѤ¹¤ë·Á¼°¤òÍѤ¤¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢½é´üÃͤÎÀßÄ꤬ɬÍפˤʤëÌõ¤Ç¤¹¤¬¡¢¤³¤Î¤È¤­¤Ë Start ¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¤·¤Þ¤¦¤È°ú¿ô¤¬¤Ê¤¤¤¿¤á¡¢¤³¤Î³°Éô¤«¤é¤â¤é¤Ã¤¿ÃͤòÀßÄꤹ¤ë¤È¤¤¤¦À߷פ¬¼Â¸½¤Ç¤­¤Þ¤»¤ó¡£

¡¡¤½¤³¤Ç Start ¥á¥½¥Ã¥É¤ÎÂå¤ï¤ê¤Ë SetTriggerATB ¥á¥½¥Ã¥É¤òºîÀ®¤·¡¢¤³¤Á¤é¤ò Presenter ¦¤«¤é¼Â¹Ô¤·¤Æ¤â¤é¤¦¤³¤È¤Ç
Presenter ¤«¤é³ÆÊÑ¿ô¤Î½é´üÃͤò¼õ¤±¼è¤Ã¤Æ¡¢¤½¤Î¾ðÊó¤ò³èÍѤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
¡¡½é´üÃͤ¬¤Ê¤±¤ì¤Ð¥²¡¼¥à¤Î¿Ê¹Ô¤¬ÂڤäƤ·¤Þ¤¦¤¿¤á¡¢SetTriggerATB ¥á¥½¥Ã¥É¤Î¼Â¹Ô¥¿¥¤¥ß¥ó¥°¤Ï
Presenter ¥¯¥é¥¹Æâ¤Î Start ¥á¥½¥Ã¥É¤«¡¢¤½¤ì¤Ë½à¤¸¤ë¡¢¥²¡¼¥à³«»Ï»þ¤Ë½èÍý¤ò¹Ô¤¦Éôʬ¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡UpdateAsObservable ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤Ë¤Ï¡¢using UniRx.Triggers; ¤ÎÀë¸À¤¬É¬ÍפǤ¹¡£

¡¡UpdateAsObservable ¥á¥½¥Ã¥É¤Ï MonoBehaviour¤Ëɳ¤Å¤¤¤Æ¤¤¤ë¤¿¤á¡¢AddTo¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£

¡¡MonoBehaviour¤¬¥¢¥¯¥Æ¥£¥Ö¤Ê´Ö¡¢Observable¤â¥¢¥¯¥Æ¥£¥Ö¤Ç¤¢¤ê¡¢MonoBehaviour¤¬½ªÎ»¤·¤¿(¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿)¤È¤­¤Ë¤Ï¡¢
Observable¤â¼«Æ°Åª¤ËÇË´þ¤µ¤ì¤ë¤¿¤á¤Ç¤¹¡£

¡¡°ìÊý¡¢Observable.EveryUpdate¤äObservable.Interval¤Ê¤É¤ÎÀÅŪ¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢AddTo¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤é¤Î¥á¥½¥Ã¥É¤Ï¡¢MonoBehaviour¤Ëɳ¤Å¤¤¤Æ¤¤¤Ê¤¤¤¿¤á¡¢Observable¤Î¼÷Ì¿¤ò´ÉÍý¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹(¼«Æ°Åª¤Ë¤ÏÇË´þ¤µ¤ì¤Ê¤¤)¡£
AddTo¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢Observable¤¬½ªÎ»¤·¤¿¤È¤­¤ËDispose¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢¥á¥â¥ê¥ê¡¼¥¯¤òËɻߤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


ATBView



ATBView.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£



¡¡
¡¡attackButton.OnClickAsObservable() ¤Ï¡¢¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤­¤Ë¼Â¹Ô¤µ¤ì¤ë IObservable<Unit> ¥¤¥Ù¥ó¥È¤òºîÀ®¤·¤Þ¤¹¡£

¡¡¤½¤Î¸å¡¢ public IObservable<Unit> OnAttackButtonClick => attackButton.OnClickAsObservable(); ¤Ï¡¢ OnAttackButtonClick ¥×¥í¥Ñ¥Æ¥£¤ò¸ø³«¤·¤Þ¤¹¡£
¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ï¡¢³°Éô¤«¤é attackButton ¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤Ë¥µ¥Ö¥¹¥¯¥é¥¤¥Ö¤¹¤ë¤¿¤á¤Î IObservable<Unit> ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄ󶡤·¤Þ¤¹¡£

¡¡¤Ä¤Þ¤ê¡¢ OnAttackButtonClick ¥×¥í¥Ñ¥Æ¥£¤ò Subscribe ¤¹¤ë¤³¤È¤Ç¡¢¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤­¤Ë¼Â¹Ô¤µ¤ì¤ë½èÍý¤òÅÐÏ¿¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢
¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤Ë¤è¤Ã¤Æ¼Â¹Ô¤µ¤ì¤ë½èÍý¤ò¡¢ATBView ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢³°Éô¥¯¥é¥¹¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


ATBPresenter



ATBPresenter.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£


¡¡Subscribe¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ¡¢model.CurrentATB¤ÎÃͤ¬Êѹ¹¤µ¤ì¤¿¤È¤­¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥³¡¼¥ë¥Ð¥Ã¥¯¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï¡¢atb¤È¤¤¤¦ÊÑ¿ô¤Ë¸½ºß¤ÎATBÃͤ¬ÅϤµ¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢¤³¤ÎÃͤò»È¤Ã¤Æ¡¢view.AtbGauge.fillAmount¥×¥í¥Ñ¥Æ¥£¤ò¹¹¿·¤·¤Æ¤¤¤Þ¤¹¡£

view.AtbGauge.fillAmount¤Ï¡¢0¤«¤é1¤ÎÈϰϤÇÃͤ¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢atb¤òmodel.MaxATB¤Ç³ä¤ë¤³¤È¤Ç¡¢0¤«¤é1¤ÎÈϰϤǤÎÃͤËÊÑ´¹¤·¤Æ¤¤¤Þ¤¹¡£AddTo¥á¥½¥Ã¥É¤Ï¡¢¥¹¥È¥ê¡¼¥à¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¡¢¤³¤³¤Ç¤Ïview¤Ë¥¹¥È¥ê¡¼¥à¤òɳÉÕ¤±¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£

¡¡²èÌ̾å¤Î UI ¤ÎÀ©¸æ¤Ç¤¹¤Î¤Ç¡¢DOTween ¤ò³èÍѤ·¤Æ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£


model.CurrentATB
    .Subscribe(atb =>
    {
        var fillAmount = atb / model.MaxATB;
        view.AtbGauge.DOFillAmount(fillAmount, 0.01f).SetEase(Ease.Linear);
    })
    .AddTo(this);

¡¡¤³¤Á¤é¤Î½èÍý¤Ë¤¹¤ë¤³¤È¤Ç¤â¡¢¥²¡¼¥¸¤ò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£


ATBController ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë³Æ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤·¡¢¥¢¥µ¥¤¥óÀßÄê¤ò¹Ô¤¦


¡¡¥¢¥¿¥Ã¥Á¤¹¤ë½çÈÖ¤ÏǤ°Õ¤Ç¤¹¡£

¡¡View ¥¯¥é¥¹¤Ë¤Ï¥²¡¼¥¸ÍѤΠImage ¤È Button ¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡Presenter ¥¯¥é¥¹¤Î³ÆÊÑ¿ô¤Ë¤Ï½é´üÃͤ¬ÂåÆþ¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¤Î¤Ç¹ç¤ï¤»¤Æ³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ç¥Ð¥Ã¥°¤·¤ä¤¹¤¤¤è¤¦¤ËÃͤòÄ´À°¤·¤Æ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£


¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü




¼Â¹Ô¤·¤ÆµóÆ°¤ò³Îǧ¤¹¤ë


¡¡Console ¥Ó¥å¡¼¤Ç Presenter ¤Î³Æ¥á¥½¥Ã¥É¤ËÍÑ°Õ¤·¤¿ Debug.Log ¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤«¤ò³Îǧ¤·¤Þ¤¹¡£





¡¡¤Þ¤¿¡¢¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤Ç¤¹¤Î¤Ç¡¢¥²¡¼¥à¾å¤ÎµóÆ°¤Ïº£¤Þ¤Ç¤ÈƱ¤¸Ä̤ê¤ËÆ°¤¯Á°Äó¤Ç¤¹¡£
¤½¤Á¤é¤â³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¥²¡¼¥à¤ò¼Â¹Ô¤¹¤ë¤È¤­¤Ë¤Ï¡¢ATBController ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÁªÂò¤·¤Æ¤ª¤­¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤â³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¥²¡¼¥à¤Î¼Â¹Ô¤Ë¹ç¤ï¤»¤Æ¡¢¿·¤·¤¯£²¤Ä¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¼«Æ°Åª¤ËÄɲ䵤ì¤Þ¤¹¡£

¡¡ObservableUpdateTrigger ¤È ObservableDestroyTrigger ¤Î£²¤Ä¤Ç¤¹¡£

¡¡
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü




¡¡ObservableUpdateTrigger ¤Ï Model ¥¯¥é¥¹Æâ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë UpdateAsObservable ¥á¥½¥Ã¥É¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤ËÄɲ䵤ì¤ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ç¤¹¡£
¤³¤Á¤é¤Ë¤è¤ê¡¢UpdateAsObservable ¤¬µ¡Ç½¤·¤Æ¤¤¤ë¤È¹Í¤¨¤Æ¤¯¤À¤µ¤¤¡£


»²¹Í¥µ¥¤¥È
Qiita @toRisouP(³ô¼°²ñ¼Ò ¥Ð¡¼¥Á¥ã¥ë¥­¥ã¥¹¥È) ÍÍ
UniRxÆþÌç ¤½¤Î4 -Update¤ò¥¹¥È¥ê¡¼¥à¤ËÊÑ´¹¤¹¤ëÊýË¡¤È¥á¥ê¥Ã¥È-



¡¡ObservableDestroyTrigger ¤Ï Presenter ¥¯¥é¥¹Æâ¤Çµ­½Ò¤·¤Æ¤¤¤ë³Æ¥¹¥È¥ê¡¼¥à¤ÎºÇ¸å¤Ë¤¢¤ë AddTo ¥á¥½¥Ã¥É¤È´ØÏ¢¤·¤Æ¤¤¤Þ¤¹¡£
AddTo ¥á¥½¥Ã¥É¤Ë¤è¤ê¼«Æ°Åª¤ËÄɲ䵤ì¤ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ç¤¹¡£Ê£¿ô¤Î AddTo ¤¬¤¢¤ë¾ì¹ç¤Ç¤â£±¤Ä¤À¤±Äɲ䵤ì¤Þ¤¹¡£

¡¡¤³¤Î ObservableDestroyTrigger Æâ¤Ë¤Ï OnDestroy() ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Ëɳ¤Å¤¤¤Æ OnDestroy() ¤¬¼Â¹Ô¤µ¤ì¡¢¤½¤ÎÃæ¤Ç Dispose()¤¬¸Æ¤Ð¤ì¤ë¤³¤È¤Ç¥¹¥È¥ê¡¼¥à¤ÎÇË´þ¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£


»²¹Í¥µ¥¤¥È
Qiita @su10 ÍÍ
¡ÚUnity¡ÛÇË´þ¤ò˺¤ì¤º¤Ë¹Ô¤¦¤¿¤á¤ËIDisposable¤ò¤¦¤Þ¤¯ÍøÍѤ¹¤ëÊýË¡¡ÚUniRx¡Û



¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡ºÇ¸å¤Ï¡¢³Æ¥¯¥é¥¹Æâ¤Î½èÍý¤Ë¤ª¤±¤ë½ÅÅÀ¥Ý¥¤¥ó¥È¤ä¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¼êË¡¤Ç¤¹¡£

¡¡¼¡¤Ï ¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý¤ÎºîÀ®Îã­¤ ¤Ç¤¹¡£