前提
Unity,C#でゲームを作っています。
前の質問が複雑になってしまったので、ここで清書します、すいません。
Sliderを使っています。
シーンが変わっていても音量を維持するようにしています。
問題
PlayerPrefsを使っているのですが、うまく音量がセーブできません。
float volume の値を変えても意味がないのでしょうか?
よろしくお願いします。
該当のソースコード
これが音量のSliderにつなげています。
public class VolumeALL : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; // インスペクター上からスライダーのオブジェクトを登録 public Slider targetSlider; public static float volume; void Start() { // mixer.GetFloat()の値は、volumeに代入される // 返り値は、パラメーターが存在しない場合にfalseになる if (mixer.GetFloat("Master", out volume)) { targetSlider.value = volume; } //セーブされている音量をロードする volume = PlayerPrefs.GetFloat("VOLUME", volume); } //sliderの所にこれを起動しています public void masterVol(Slider slider) { mixer.SetFloat("Master", slider.value); }
シーンを切り替えるボタンの所で、
public void SaveVolume(float volume) { float Volume = VolumeALL.volume; PlayerPrefs.SetFloat("VOLUME", Volume); }
を起動させています。
###訂正後
public class VolumeALL : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; // インスペクター上からスライダーのオブジェクトを登録 public Slider targetSlider; void Start() { targetSlider.value = PlayerPrefs.GetFloat("Master",0); } public void masterVol(Slider slider) { mixer.SetFloat("Master", slider.value); } }
シーンを移動させるボタンにこのメソッドを起動
public void SaveVolume(Slider slider) { PlayerPrefs.SetFloat("Master", slider.value); PlayerPrefs.Save(); }
これで、Sliderをセーブ、ロードすることが出来ました。自分自身、教えて頂かなければ、一生出来なかったと思います。
回答、本当にありがとうございます。
もし良ければ、もう少しだけ教えて頂けたらと思います。
##問題点
次は、その音量を変えるシーンに移らなければ、音量が変わらないという事になりました。
私のゲームでは、タイトルのシーンが最初なので、一度設定のシーンに行かなければ音量が変わりません。
タイトル画面の状態から音量が変わっている、というようにすることは可能でしょうか?
##タイトル画面の音楽を流しているコード
関係ないかもしれないのですが、挙げます
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //シーンが同じでも重複再生されないコード //━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ public class Sound2 : MonoBehaviour { public bool dontDestroyEnabled = true; //instanceにSoundを格納 private static Sound2 instance = null; public static Sound2 Instance { get { return instance; } } void Awake() { //既にinstanceに曲入っていて、新たに入った曲があれば、それを消去 if (instance != null && instance != this) { Destroy(this.gameObject); return; } //曲がまだなら曲スタート else { instance = this; } //サウンドを消去せずに維持する DontDestroyOnLoad(this.gameObject); }
解決したコード
音量の変更をするスライダー部分
public class VolumeALL : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; // インスペクター上からスライダーのオブジェクトを登録 public Slider targetSlider; void Start() { targetSlider.value = PlayerPrefs.GetFloat("Master",0); masterVol(targetSlider); } public void masterVol(Slider slider) { mixer.SetFloat("Master", slider.value); } }
タイトル画面
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //シーンが同じでも重複再生されないコード //━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ public class Sound2 : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; public bool dontDestroyEnabled = true; //instanceにSoundを格納 private static Sound2 instance = null; public static Sound2 Instance { get { return instance; } } void Awake() { //既にinstanceに曲入っていて、新たに入った曲があれば、それを消去 if (instance != null && instance != this) { Destroy(this.gameObject); return; } //曲がまだなら曲スタート else { instance = this; } //サウンドを消去せずに維持する DontDestroyOnLoad(this.gameObject); } void Start() { mixer.SetFloat("Master", PlayerPrefs.GetFloat("Master", 0)); }
回答して頂いた皆様(MMashiro様、capra314cabra様、ha_wn様、TomoG12様)のおかげで、無事うまくセーブ、ロードが出来ました。
無知な私に、長い時間付き合って頂き、本当にありがとうございます。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/26 12:44
2018/06/27 03:52 編集
2018/06/27 01:54 編集
2018/06/27 04:42
2018/06/27 05:53 編集
2018/06/27 05:01 編集
2018/06/27 05:00
2018/06/27 05:02
2018/06/27 05:09
2018/06/27 05:34 編集
2018/06/27 05:33 編集
2018/06/27 05:38
2018/06/27 05:57 編集
2018/06/27 05:50