Unityでスライダーの値をシーン間で保持する方法と実装例

C言語関連

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を使った保存やシングルトンパターンの利用が有効です。どちらもシンプルに実装でき、ユーザーが設定したスライダー値をシーン遷移後も反映させることが可能です。

コメント

タイトルとURLをコピーしました