Open2

UGUIでUniRx

KaraKara

UnityのUI部分でUniRxを使ってみるメモです。

KaraKara

長押しで数値が変わって、数値の変化の量も上がっていくボタン

タッチディスプレイで数値の変更をするときに連打はきついものがあるけど微調整もしたいと思い書いてみました。

もっといい書き方があるのかもしれないですが、思いつきませんでした。

[Serializable]
public class ValueChangeButton
{
    [SerializeField] private Button btn;
    [SerializeField] private float baseStep = 1, stepChangeRate = 1.1f;

    public void SetUp(Action<float> onChange)
    {
        var step = baseStep;

        var bag = new List<IDisposable>();
        btn.OnPointerDownAsObservable().Subscribe(_ =>
        {
            Observable.Timer(TimeSpan.FromSeconds(0.5f), TimeSpan.FromSeconds(0.5f))
                .Subscribe(_ => step *= stepChangeRate)
                .AddTo(bag);
            Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(0.1f))
                .Subscribe(_ => onChange(step))
                .AddTo(bag);
        }).AddTo(btn);
        btn.OnPointerUpAsObservable().Subscribe(_ =>
        {
            step = baseStep;
            bag.ForEach(v => v.Dispose());
        }).AddTo(btn);
    }
}