Closed1
【Unity】オレオレUniRxタイマー
public class Timer
{
private readonly ReactiveProperty<int> _left;
private readonly Subject<Unit> _overSubject = new Subject<Unit>();
private IDisposable _subscription;
public int Max { get; }
public IReactiveProperty<int> Left => _left;
public IObservable<Unit> OverObservable => _overSubject;
public Timer(int max)
{
Max = max;
_left = new ReactiveProperty<int>(max);
_subscription = null;
}
public void Start()
{
if (_subscription != null) return;
// 更新処理
_subscription = Observable.EveryUpdate()
.Subscribe(_ =>
{
// 時間を減らす
_left.Value -= (int)Mathf.Floor(Time.deltaTime);
});
// 残り時間が0になったらTimeOverイベントを発行
_left
.Where(value => value <= 0)
.Subscribe(_ => { _overSubject.OnNext(Unit.Default); });
}
public void Stop()
{
_subscription?.Dispose();
_subscription = null;
}
public void Reset()
{
// 残り時間のリセット
_left.Value = Max;
}
}
このスクラップは2023/05/02にクローズされました