¡¡MonoBehaviour ¤ò·Ñ¾µ¤·¤¿·Á¤Ç¤ÎºîÀ®¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
¼¡¤Î¼ê½ç¤Ç¤Ï
MonoBehaviour ¤ò·Ñ¾µ¤·¤Ê¤¤·Á¤Ç¤ÎºîÀ®¤ò¹Ô¤¦¤¿¤á¡¢¤³¤³¤Ç¤Ïʬ¤«¤ê¤ä¤¹¤¯¥¯¥é¥¹Ì¾¤òʬ¤±¤Æ¤¤¤Þ¤¹¡£
¡¡º£²ó¤ÏÀÜÈø¤Ë Mono ¤ò¤Ä¤±¤ë¤³¤È¤Ç¡¢MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤ë Model ¥¯¥é¥¹¤Ç¤¢¤ë¤³¤È¤òÌÀ¼¨Åª¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
ATBModel_Mono.cs
<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹¡£
using UniRx;
using UnityEngine;
using UniRx.Triggers;¡¡¡¡//¡¡UpdateAsObservable() ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤¿¤á¤ËɬÍפǤ¹
public class ATBModel_Mono : MonoBehaviour
{
public ReactiveProperty<float> CurrentATB;
public float MaxATB { get; private set; }
public float RecoveryRate { get; private set; }
public float AttackThreshold { get; private set; }
// ³°Éô¤«¤é¼Â¹Ô¤¹¤ëÀßÄêÍѥ᥽¥Ã¥É
public void SetTriggerATB(float maxATB, float recoveryRate, float attackThreshold)
{
CurrentATB = new ReactiveProperty<float>(0f);
MaxATB = maxATB;
RecoveryRate = recoveryRate;
AttackThreshold = attackThreshold;
// ATB¤ò²óÉü¤¹¤ë¥¹¥È¥ê¡¼¥à
this.UpdateAsObservable()
.Where(_ => CurrentATB.Value < MaxATB)
.Subscribe(_ => CurrentATB.Value += RecoveryRate * Time.deltaTime);
}
// ATBÃͤò¥ê¥»¥Ã¥È¤¹¤ë
public void ResetATB()
{
CurrentATB.Value = 0f;
}
}
¡¡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¤¹¤ë¤³¤È¤¬¤Ç¤¡¢¥á¥â¥ê¥ê¡¼¥¯¤òËɻߤ¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£