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って何かしら抜けているところが多いんですよね…。
ちょっと手を入れればカバーできる範囲とはいえ、ネイティブで対応してほしいなーとも思う今日この頃です。