前提
以下のブログの記事(以下ブログとします。)を元に5段階の音量調節機能をつけようと思いました。
【Unity】AudioMixerを使ってスクリプトから音量を調整する
参考にしたブログのコードには、データの記録機能がなかったので、EasySave(playerprefsのようなもの)というアセットを使い自分で付け足しました。
以下のnoteの記事(以下noteとします。)を元に段階を付けない音量調節機能は実装できました。
【AudioMixer】Unityで簡単音量調整ができるオーディオミキサー機能【SoundOption編】
実現したいこと
以下の3点から5段階で調節できて、スライダーの位置と音量が一致しており、アプリ終了とシーン遷移時もスライダーの位置と音量が記録されているシステムを作りたいです。
1.noteの方法だと、スライダーが半分以下になると極端に音が小さくなってしまうため、ブログの方法を使いたい。
2.ブログの方法を元に SetSE(float volume) を記述したが、シーン遷移すると、音量は保存されているが、スライダーの位置が一番右に戻っている。
3.一度アプリを終了し、再度起動すると、音量は最大、スライダーの位置は一番右に戻っている。
以下のコードは SetBGM(float volume)はnote側、 SetSE(float volume) はブログ側を元に記述しています。
C#
1using UnityEngine; 2using UnityEngine.Audio; 3using UnityEngine.UI; 4 5public class AudioVolume : MonoBehaviour { 6 public AudioMixer audioMixer; 7 public Slider bGMSlider; 8 public Slider sESlider; 9 10 private void Start() { 11 float bgmVolume = ES3.Load<float>("BGM_VOLUME", 1); 12 float seVolume = ES3.Load<float>("SE_VOLUME", 5); 13 bGMSlider.value = bgmVolume; 14 sESlider.onValueChanged.AddListener(SetSE); 15 } 16 17 public void SetBGM(float volume) { 18 bGMSlider.value = volume; 19 audioMixer.SetFloat("BGM", volume); 20 ES3.Save<float>("BGM_VOLUME", volume); 21 } 22 23 public void SetSE(float volume) { 24 //sESlider.value = volume; 25 //audioMixer.SetFloat("SE", volume); 26 //ES3.Save<float>("SE_VOLUME", volume); 27 28 //5段階補正 29 var a = volume /= 5; 30 31 //-80~0に変換 32 var marume = Mathf.Clamp(Mathf.Log10(a) * 20f, -80f, 0f); //marume 0.2 a = 3/5 33 audioMixer.SetFloat("SE", marume); 34 ES3.Save<float>("SE_VOLUME", volume); 35 } 36} 37 38### 試したこと 39様々な変数の入れ替え等。 40スライダーが動かなくなったりしたため、一番いい状態のコードを載せております。 41 42### 補足情報(FW/ツールのバージョンなど) 43Unity2022.3.32f; 44ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。