Unityで複数のシーン間でスライダーのつまみ位置を保持して表示したい場合、シーン遷移後も同じ値を反映させる方法があります。本記事では、簡単に実装できる手法と具体例を紹介します。
スライダー値の保持が必要な理由
Unityではシーンを切り替えると、通常オブジェクトの状態はリセットされます。そのため、シーン1で設定したスライダー値がシーン2に反映されないことがあります。
この問題を解決するには、スライダーの値を永続化する仕組みを導入する必要があります。
PlayerPrefsを使った値の保存
最も簡単な方法は、PlayerPrefsを使って値を保存し、シーンロード時に読み込むことです。
例えば、スライダーの値が変わったときに保存するコード。
using UnityEngine;
using UnityEngine.UI;
public class SliderSave : MonoBehaviour
{
public Slider slider;
void Start()
{
slider.value = PlayerPrefs.GetFloat("SliderValue", 0.5f);
slider.onValueChanged.AddListener(delegate { SaveValue(); });
}
void SaveValue()
{
PlayerPrefs.SetFloat("SliderValue", slider.value);
}
}
この方法で、どのシーンでも同じスライダー値を表示できます。
Singletonパターンを利用したスクリプト
もう一つの方法は、シングルトンで値を保持する方法です。シーン間でオブジェクトを破棄せずに残すことができます。
例。
public class SliderManager : MonoBehaviour
{
public static SliderManager Instance;
public float sliderValue = 0.5f;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
スライダー側ではStartでslider.value = SliderManager.Instance.sliderValue;を設定し、値が変わったらSliderManager.Instance.sliderValue = slider.value;で更新します。
UIとの接続方法
各シーンのスライダーには、スクリプトをアタッチし、Startで保存済み値を読み込みます。値変更時には保存処理を呼ぶことで常に最新の値を保持できます。
これにより、シーン間で一貫したスライダー状態をユーザーに提供できます。
まとめ
Unityでスライダーの値をシーン間で保持するには、PlayerPrefsを使った保存やシングルトンパターンの利用が有効です。どちらもシンプルに実装でき、ユーザーが設定したスライダー値をシーン遷移後も反映させることが可能です。


コメント