¡¡MonoBehaviour ¤Î·Ñ¾µ¤¬¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£¤½¤Î¤¿¤á¤³¤Î¥¯¥é¥¹¤Ï new ¤·¤Æ¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤·¤ÆÍøÍѤ¹¤ë·Á¼°¤Ë¤Ê¤ê¤Þ¤¹¡£
¤Þ¤¿ SetTriggerATB ¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¥á¥½¥Ã¥É¤È¡¢¤½¤Î°ú¿ô¤òÍøÍѤ·¤Æ¥á¥ó¥ÐÊÑ¿ô¤Î½é´üÀßÄê¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¡MonoBehaviour ¤ÈɳÉÕ¤¤¤Æ¤¤¤¿ UpdateAsObservable ¥á¥½¥Ã¥É¤ÎÂå¤ï¤ê¤Ë¡¢ÀÅŪ¥á¥½¥Ã¥É¤Ç¤¢¤ë Observable.EveryUpdate ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤³¤È¤ÇÂåÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤³¤Á¤é¤Î¥á¥½¥Ã¥É¤Ï MonoBehaviour ¤Ë¤ÏɳÉÕ¤¤¤Æ¤¤¤Ê¤¤¥á¥½¥Ã¥É¤Ç¤¢¤ë¤¿¤á¡¢AddTo ¥á¥½¥Ã¥É¤Ë¤è¤ê¡¢¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤ò´ÉÍý¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤Ê¤ª¡¢using UnityEngine; ¤ÎÀë¸À¤Ï¡¢ Time ¥¯¥é¥¹¤òÍøÍѤ¹¤ë¤¿¤á¤ËɬÍפǤ¹¡£
¡¡Observable.EveryUpdate() ¤Ë¤è¤ë¥¹¥È¥ê¡¼¥à¤Ï¡¢AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢ºîÀ®¤ÈƱ»þ¤Ë CompositeDisposable¤Ë¼«Æ°Åª¤ËÄɲ䵤ì¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ÇË´þ¤µ¤ì¤ë¤È¤¤ËDispose¥á¥½¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¡¢¤½¤ì¤Ë¤è¤Ã¤ÆCompositeDisposable¤Ë´Þ¤Þ¤ì¤ëÁ´¤Æ¤Î¥¹¥È¥ê¡¼¥à¤¬¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤Þ¤¹
¡¡¤³¤Î¤È¤¡¢AddTo ¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë¤Ï
this ¤Ï½ñ¤±¤Þ¤»¤ó¡£
Íýͳ¤Ï
MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¤¿¤á¤Ç¤¹¡£
¡¡MonoBehaviour¤ÏComponent¤ò·Ñ¾µ¤·¤Æ¤ª¤ê¡¢Component¤ÏObject¤ò·Ñ¾µ¤·¤Æ¤¤¤Þ¤¹¡£
Object¤Ë¤ÏIDisposable¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢
MonoBehaviour¤ä¤½¤ÎÇÉÀ¸¥¯¥é¥¹¤Ç¤¢¤ë¥¹¥¯¥ê¥×¥È¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ç¤âAddTo(this)¤¬ÍøÍѤǤ¤Þ¤¹¡£
¡¡°ìÊý¡¢°ìÈÌŪ¤ÊC#¥¯¥é¥¹¤Ï
IDisposable¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢this ¤È¤Ï½ñ¤±¤Þ¤»¤ó¡£
AddTo()¤ÎÌá¤êÃͤòÊÝ»ý¤¹¤ëCompositeDisposable¥ª¥Ö¥¸¥§¥¯¥È¤òÊÌÅÓºîÀ®¤·¤Æ¡¢¤½¤³¤Ë¥¹¥È¥ê¡¼¥à¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤ÎCompositeDisposable¥ª¥Ö¥¸¥§¥¯¥È¤ÏɬÍפ˱þ¤¸¤ÆÌÀ¼¨Åª¤ËDispose¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
private readonly CompositeDisposable disposables = new ();
// ATB¤ò²óÉü¤¹¤ë¥¹¥È¥ê¡¼¥à
Observable.EveryUpdate()
.Where(_ => CurrentATB.Value < MaxATB)
.Subscribe(_ => CurrentATB.Value += RecoveryRate * Time.deltaTime)
.AddTo(disposables); // ¥¹¥È¥ê¡¼¥à¤¬À¸À®¤µ¤ì¤¿»þ¤Ë¼«Æ°Åª¤Ë CompositeDisposable ¤ËÄɲÃ
/// <summary>
/// ¥ª¥Ö¥¸¥§¥¯¥È(¥¤¥ó¥¹¥¿¥ó¥¹)¤¬ÇË´þ¤µ¤ì¤ë¤È¤¤ËCompositeDisposable¤ÎDispose¤â¸Æ¤Ó½Ð¤¹
/// </summary>
public void Dispose()
{
// Dispose ¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤¿¤È¤¤Ë¡¢CompositeDisposable ¤Ë´Þ¤Þ¤ì¤ëÁ´¤Æ¤Î¥¹¥È¥ê¡¼¥à¤¬¼«Æ°Åª¤Ë²òÊü
disposables.Dispose();
}
¡¡¥¯¥é¥¹¤¬ MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢OnDestroy ¥á¥½¥Ã¥É¤¬ÍøÍѤǤ¤Ê¤¤¤¿¤á¡¢
Âå¤ï¤ê¤Ë IDisposable ¤ò¼ÂÁõ¤·¡¢Dispose ¥á¥½¥Ã¥É¤Ç¥¹¥È¥ê¡¼¥à¤ò¼êÆ°¤Ç²òÊü¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡º£²óÀë¸À¤ÇÍøÍѤ·¤Æ¤¤¤ë CompositeDisposable ¤Ï IDisposable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
Dispose() ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢ÊÝ»ý¤·¤Æ¤¤¤ëÁ´¤Æ¤Î IDisposable ¥ª¥Ö¥¸¥§¥¯¥È (¥¹¥È¥ê¡¼¥à) ¤òÇË´þ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢CompositeDisposable ¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢Ê£¿ô¤Î¥¹¥È¥ê¡¼¥à¤ò¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¤³¤È¤¬¤Ç¤¡¢´Êñ¤Ë°ì³ç¤Ç Dispose() ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡½èÍý¤Îή¤ì¤È¤·¤Æ¤Ï¡¢Observable ¤Ë AddTo(disposables) ¤òÄɲ乤뤳¤È¤Ç¡¢¥¹¥È¥ê¡¼¥à¤¬À¸À®¤µ¤ì¤¿»þ¤Ë¼«Æ°Åª¤Ë CompositeDisposable ¤ËÄɲ䵤ì¤Þ¤¹¡£
¤½¤·¤Æ¡¢Dispose ¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤¿¤È¤¤Ë¡¢CompositeDisposable ¤Ë´Þ¤Þ¤ì¤ëÁ´¤Æ¤Î¥¹¥È¥ê¡¼¥à¤¬¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢ATBModel¥¯¥é¥¹¤Î¾ì¹ç¤Ï¡¢Dispose ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢AddTo(disposables) ¤ÇÅÐÏ¿¤µ¤ì¤¿¥¹¥È¥ê¡¼¥à¤ò¼êÆ°¤Ç²òÊü¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ê½¤Àµ¤ò¹Ô¤¦¤È¡¢Presenter ¦¤Î Awake ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤âÊѹ¹¤¬É¬ÍפǤ¹¡£
SetTriggerATB ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤¿Éôʬ¤Ç¡¢Âå¤ï¤ê¤Ë Model ¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤Æ¥³¥ó¥¹¥È¥é¥¯¥¿¥á¥½¥Ã¥É¤Ë°ú¿ô¤òÅϤ¹¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£