¡¡Start ¥á¥½¥Ã¥É¤ÇReactiveProperty<float>·¿¤ÎcurrentATB¤ò0¤Ç½é´ü²½¤·¤Æ¤¤¤Þ¤¹¡£
¤¿¤À¤·¤³¤ì¤ÏÀë¸À¤Î»þÅÀ¤Ç½é´ü²½¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¡¡¹¶·â¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤é ResetATB ¤ò¼Â¹Ô¤·¡¢currentATB.Value¤ò0¤Ë¥ê¥»¥Ã¥È¤¹¤ë¥¹¥È¥ê¡¼¥à¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢ATBÃͤò²óÉü¤¹¤ë¥¹¥È¥ê¡¼¥à¤âºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤¤¤Þ¤Þ¤Ç Update ¥á¥½¥Ã¥ÉÆâ¤Ë¤¢¤Ã¤¿ ATB¥²¡¼¥¸¤Îɽ¼¨¤ò¹¹¿·¤¹¤ë½èÍý¤ä¡¢¹¶·â¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¹¹¿·¤¹¤ë½èÍý¤ò UniRx ¤òÍøÍѤ·¤Æ¥¹¥È¥ê¡¼¥à¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
Select ¥ª¥Ú¥ì¡¼¥¿¤ò³èÍѤ·¡¢currentATB¤ÎÃͤ¬attackThreshold°Ê¾å¤Ç¤¢¤ì¤Ð¹¶·â¥Ü¥¿¥ó¤ò͸ú¤Ë¤·¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð̵¸ú¤Ë¤·¤Þ¤¹¡£
¤½¤ÎºÝ¤Ë¤Ï Subscribe ¤Ç¤Ï¤Ê¤¯¡¢
SubscribeToInteractable ¤òÍøÍѤ¹¤ë¤³¤È¤Ç½èÍý¤ò´Ê·é¤Ëµ½Ò¤·¤Æ¤¤¤Þ¤¹¡£
¡ãSubscribeToInteractable ¤Î¾ì¹ç¡ä
// ¹¶·â¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¹¹¿·¤¹¤ë¥¹¥È¥ê¡¼¥à(¡ù¡¡¤¤¤Þ¤Þ¤Ç Update ¤Ç½èÍý¤·¤Æ¤¤¤¿ÆâÍÆ)
currentATB
.Select(atb => atb >= attackThreshold)
.SubscribeToInteractable(attackButton)
.AddTo(this); // ¥¹¥È¥ê¡¼¥à¤òÇË´þ¤¹¤ë¤¿¤á¤ËɬÍ×
¡¡¤³¤ì¤Ï
¡ãSubscribe ¤Î¾ì¹ç¡ä
// ¹¶·â¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¹¹¿·¤¹¤ë¥¹¥È¥ê¡¼¥à(¡ù¡¡¤¤¤Þ¤Þ¤Ç Update ¤Ç½èÍý¤·¤Æ¤¤¤¿ÆâÍÆ)
currentATB
.Select(atb => atb >= attackThreshold)
.Subscribe(isInteractable => attackButton.interactable = isInteractable) // ¤³¤ÎÉôʬ¤òSubscribeToInteractable¤ÇÂåÍѤ·¤Æ¤¤¤ë
.AddTo(this); // ¥¹¥È¥ê¡¼¥à¤òÇË´þ¤¹¤ë¤¿¤á¤ËɬÍ×
¡¡¤ÈƱ¤¸¤Ç¤¹¡£
»²¹Í¥µ¥¤¥È
Qiita @RyotaMurohoshi ÍÍ
UniRx¤Ç¥È¥°¥ë¤Î¥ª¥ó¡¦¥ª¥Õ¤ÎÊѹ¹¤ËϢư¤·¡¢¥Ü¥¿¥ó¤Î͸ú¡¦Ìµ¸ú¤òÊѲ½¤µ¤»¤ë
¡¡¤³¤ì¤é¤Î¥¹¥È¥ê¡¼¥à¤òAddTo¥á¥½¥Ã¥É¤ÇATBController¤ËÂФ·¤Æ¹ØÆɤ·¡¢GameObject¤¬ÇË´þ¤µ¤ì¤¿¤È¤¤Ë¥¹¥È¥ê¡¼¥à¤âÇË´þ¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ë UniRx¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢ATB¥·¥¹¥Æ¥à¤Î¼ÂÁõ¤¬´Êñ¤Ë¤Ê¤ê¡¢¥³¡¼¥É¤¬¤è¤ê¥·¥ó¥×¥ë¤Ë¤Ê¤ê¤Þ¤¹¡£
UniTask¤ò»ÈÍѤ¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¤¬¡¢¤³¤Î¾ì¹ç¤ÏATBÃͤβóÉü¤Ê¤É¡¢°ìÄê´Ö³Ö¤Ç¼Â¹Ô¤µ¤ì¤ë½èÍý¤Ë¸ÂÄꤷ¤Æ»ÈÍѤ¹¤ë¤³¤È¤¬°ìÈÌŪ¤Ç¤¹¡£
¡¡¤³¤³¤Ç¤Î½ÅÍפÊÅÀ¤Ï¡¢¥¹¥È¥ê¡¼¥à¤ò³èÍѤ·¤Æ³Æµ¡Ç½¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤³¤È¤Ç¡¢
¥³¡¼¥É¤ò´Ê·é¤«¤Äʬ¤«¤ê¤ä¤¹¤¯¤·¤Æ¤¤¤ë¤³¤È¤Ç¤¹¡£
¥Ç¡¼¥¿¤Îή¤ì¤òÌÀ³Î¤Ë¤·¡¢¥³¡¼¥É¤ÎÆɤߤ䤹¤µ¤äÊݼéÀ¤ò¸þ¾å¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£