(この記事の使用環境: Unity5.5.0f3 Personal、Windows10

スライダーで変更した値を取得できない現象が起こり、それに対処したので、備忘録です。

UnityのUIであるスライダー(Slider)のインスペクタには「OnValueChanged」という欄があり、スライダーを動かした情報をさまざまな処理に使用することができます。

今回教材の勉強中に、スライダーで変更した値(float)をOnValueChangedで正しく取得できない現象が起こったので、ぐぐって対処してみました。(※ 必ず発生する現象というわけではないかもしれません。なんらかの環境依存かも)

参考にしたのは こちら ↓

Unity3D Slider onValueChanged sending only 0 (or other defined value)|stackoverflow.com


スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました。

コードはこんな感じ。
using System.Collections;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;


public class VolumeSettings : MonoBehaviour
{
    public AudioMixer mixer;

    // この方法だとスライダーの値を持ってくることができた
    public void ChangeMusicVolume (Slider slider)
    {
        mixer.SetFloat ("MusicVolume", slider.value);
        Debug.Log ("MusicVolume: " + slider.value);
    }

    /* なぜかスライダーの値を変えても 0 しか持ってこなかった(環境依存かも)
    public void ChangeMusicVolume (float vol)
    {
	mixer.SetFloat ("MusicVolume", vol);
        Debug.Log ("MusicVolume: " + vol);      // 0 しか持ってきていない
    }
    */

    // こっちは未変更
    public void ChangeSfxVolume (float vol)
    {
	mixer.SetFloat ("SfxVolume", vol);
        Debug.Log ("SfxVolume: " + vol);
    }
}


あとはスライダーのインスペクタで、引数にスライダーのオブジェクトを指定してやればOKでした。

SnapCrab_NoName_2017-3-1_23-13-57_No-001

SnapCrab_NoName_2017-3-1_23-20-43_No-00

今回は以上です。