2020/11/09
UnityのSliderで「トグルからマウス/タップを離したタイミング」で処理を実行させたかったので、UniRxを使ってさくっと実装してみました。
ということで、まずはこんな感じのヘルパーを用意。
using System;
using UniRx;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class SliderHelper : MonoBehaviour, IPointerUpHandler
{
private Slider slider;
protected Subject<float> changeValueSubject = new Subject<float>();
private void Awake()
{
slider = GetComponent<Slider>();
}
public IObservable<float> OnChangeValue
{
get { return changeValueSubject; }
}
public void OnPointerUp(PointerEventData eventData)
{
changeValueSubject.OnNext(slider.value);
}
}
これをSliderコンポーネントが付いているオブジェクトに設定します。
使う側はこんな感じ。インスペクターからsliderHelperに先ほどのSliderHelperコンポーネントを設定しましょう。
(usingやクラス宣言等は省略しています)
[SerializeField]
protected SliderHelper sliderHelper;
void Start()
{
sliderHelper.OnChangeValue.Subscribe(value => {
Debug.Log(value);
});
}
ちなみに私が作った理由は「設定画面の音量調整」
効果音の調整で値を変える度にSEが鳴ってしまって大変鬱陶しかったので、Sliderを動かした後に1回だけ鳴らすため作りました。
にしてもUnity標準のUIって何かしら抜けているところが多いんですよね…。
ちょっと手を入れればカバーできる範囲とはいえ、ネイティブで対応してほしいなーとも思う今日この頃です。







