質問: ### 前提・実現したいこと 音量をスライダーで変更したい ### 発生している問題・エラーメッセージ オーディオミキサー側の値は保持されるがシーンを切り替えるとスライダーの位置が初期値に戻ってしまいます ### 該当のソースコード ``` using UnityEngine; using System.Collections; using UnityEngine.Audio; using UnityEngine.UI; public class VolumeController : MonoBehaviour { [SerializeField] private AudioMixer mixer; public void SetMaster(float volume) { mixer.SetFloat("MasterVol", volume); } public void SetBGM(float volume) { mixer.SetFloat("BGMVol", volume); } public void SetSE(float volume) { mixer.SetFloat("SEVol", volume); } } ```
回答: AudioMixer.SetFloat は実行時の AudioMixer アセットのクローンの値を変えているだけでアセットに保存されている値を変えているわけではないため、シーンを切り替えたり実行を停止して再度アセットからインスタンスをクローンするとアセットに保存された値に戻ります。 これはプレハブ(から作ったクローン)やマテリアルなどの値をスクリプトから変えてもアセットに保存されている値が変わらないのと一緒です。 そのため別シーンで変更した値をシーン切り替え後も維持するためには PlayerPrefs などに値を保存しておき、シーン切り替え時にはそこから保存した値を読み込んで AudioMixer の設定値として SetFloat するなどの実装が必要になります。