前提
Unity,C#でゲームを作っています。
音量を変えたまま、セーブしたいと思っています。
音量調整はSliderを使っています。
現在問題は一番下のコードです。
問題
public float volume = PlayerPrefs.GetFloat("Volume", 0);
をしたところ、エラーが起きました。
UnityException: GetFloat is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'VolumeALL'.
GetFloatはMonoBehaviourから呼び出すことはできないとしたら、void Start()にfloat volumeを入れればいいのですが、そうなると、SetFloatでvolumeをセーブできません。
該当のソースコード
public class VolumeALL : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; // インスペクター上からスライダーのオブジェクトを登録 public Slider targetSlider; public float volume = PlayerPrefs.GetFloat("Volume", 0); void Start() { // mixer.GetFloat()の値は、volumeに代入される // 返り値は、パラメーターが存在しない場合にfalseになる if (mixer.GetFloat("Master", out volume)) { targetSlider.value = volume; } } public void masterVol(Slider slider) { mixer.SetFloat("Master", slider.value); PlayerPrefs.SetFloat("Volume", volume); } }
試したこと
ほかにどのような方法でセーブできるのかが分かりません。
また、このエラーをどうにかする方法が分かりません。
教えて頂けたらとても嬉しいです、よろしくお願いします。
###訂正後
//音量調整する設定画面 public class VolumeALL : MonoBehaviour { public UnityEngine.Audio.AudioMixer mixer; // インスペクター上からスライダーのオブジェクトを登録 public Slider targetSlider; //staticを入れる public static float volume; void Start() { //ロードする volume = PlayerPrefs.GetFloat("Volume", 0); // mixer.GetFloat()の値は、volumeに代入される // 返り値は、パラメーターが存在しない場合にfalseになる if (mixer.GetFloat("Master", out volume)) { targetSlider.value = volume; } } //Sliderの所で起動する public void masterVol(Slider slider) { mixer.SetFloat("Master", slider.value); //セーブする PlayerPrefs.SetFloat("Volume", volume); } }
直しましたが、次は再起動しても音量が変わったままになりません。
PlayerPrefs.SetFloat の場所が悪いのでしょうか?
その場合、どこに PlayerPrefs.SetFloat を入れれば良いのでしょうか?
もしくは、Startの PlayerPrefs.GetFloat が良くないのでしょうか?
申し訳ございません、もう少しだけよろしくお願いします。
###更に訂正後
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 void SaveVolume(Slider slider) { PlayerPrefs.SetFloat("Master", slider.value); PlayerPrefs.Save(); }
これで音量の保存はできましたが、タイトル画面から音量が変わることはありませんでした。一度音量設定画面に行かなければ変更された音量がロードされません。
どうすれば良いでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/23 11:40
2018/06/23 11:49
2018/06/23 12:08
2018/06/24 11:05
2018/06/25 12:44
2018/06/26 07:15