public void Initialize() { // 有効になった後 DidActiveDisposable = ActivateSubject // 受付時間が経過した後 .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(Constant.MoleActiveDuration))) // まだ攻撃が有効な場合 .Where(_ => CanAttack) // 非表示にする .Subscribe(_ => HideSubject.Do()); // 無効になった後 DidInactiveDisposable = DeactivateSubject // ランダムに待った後 .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(UnityEngine.Random.Range(Constant.MoleInactiveDurationFrom, Constant.MoleInactiveDurationTo)))) // 次の処理をランダムに決定して実行 .Subscribe(_ => NextActionMap.Random().Value(this).Do()); ActivateSubject.Subscribe(_ => CanAttack = true); DeactivateSubject.Subscribe(_ => CanAttack = false); // 表示が終わったら当たり判定を有効にする ShowSubject.WhenDid().Subscribe(_ => ActivateSubject.OnNext(Unit.Default)); // 消去が始まったら当たり判定を無効にする HideSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); // フェイントが終わったら当たり判定を無効にする FeintSubject.WhenDid().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); // 攻撃が始まったら当たり判定を無効にする AttackSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default)); }
public void Start() { DeactivateSubject.OnNext(Unit.Default); }