ゴマちゃんフロンティア

アザラシが大好きな山梨県産SEの開発日記です

【Unity】Sliderのトグルを離したタイミングで処理を行う

time 2020/05/29

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

down

コメントする



このブログを書いている人

りべるん

りべるん

アザラシが大好きな山梨県産Webエンジニア。2019年3月よりフリーランスSEとして東京で活動中。自称「Web業界のアザラシ」 [詳細]