音量を変えたとしてもシーンをまたいで使えるようにしたい。
解決したいこと
前のシーンで音量をいじった後にシーンをまたいだとしても設定した音量を継続させたい。
プログラミング初心者なのですが、オーディオスライダーを自分なりにネットで調べて作ったのですが、前のシーンで設定した音量を次のシーンに受け継ぐ方法がよくわからないので、知っている方がいましたらご教授していただけると助かります。
複雑なプログラムで2つのプログラムを合わせて使っているのですが、どこかにちょい足しでスプリクト書き込めばいけそうな気がするのですが、どこをどうしたらいいかよくわからないのでコードを載せてみますので、分かる方おりましたらよろしくお願いします。
該当するソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManager : MonoBehaviour
{
[SerializeField] AudioClip[] seList;
[SerializeField] AudioClip[] bgmList;
[SerializeField] AudioClip[] voiceList;
[SerializeField] AudioSource audioSourceBGM;
[SerializeField] AudioSource audioSourceSE;
[SerializeField] AudioSource audioSourceVoice;
public float BGMVolume
{
get { return audioSourceBGM.volume; }
set { audioSourceBGM.volume = value; }
}
public float SEVolume
{
get { return audioSourceSE.volume; }
set { audioSourceSE.volume = value; }
}
public float VoiceVolume
{
get { return audioSourceVoice.volume; }
set { audioSourceVoice.volume = value; }
}
static AudioManager Instance = null;
public static AudioManager GetInstance()
{
if (Instance == null)
{
Instance = FindObjectOfType<AudioManager>();
}
return Instance;
}
private void Awake()
{
if (this != GetInstance())
{
Destroy(this.gameObject);
return;
}
DontDestroyOnLoad(this.gameObject);
}
public void PlaySound(int index)
{
audioSourceSE.PlayOneShot(seList[index]);
}
public void PlayBGM(int index)
{
audioSourceBGM.clip = bgmList[index];
audioSourceBGM.Play();
}
public void PlaySound2(int index)
{
audioSourceVoice.clip = voiceList[index];
audioSourceVoice.Play();
}
}
上のスクリプトと下のスクリプトを使ってスライダーを使って音量(BGM、SE、voice)を操作しております。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class presenter : MonoBehaviour
{
public bool DontDestroyEnabled = true;
[SerializeField] Slider bgmSlider;
[SerializeField] Text bgmVolumeText;
[SerializeField] Slider seSlider;
[SerializeField] Text seVolumeText;
[SerializeField] Slider voiceSlider;
[SerializeField] Text voiceVolumeText;
// Start is called before the first frame update
void Start()
{
//AudioManager.GetInstance().PlayBGM(0);
OnChangedBGMSlider();
OnChangedSESlider();
OnChangedVoiceSlider();
if (DontDestroyEnabled)
{
// Sceneを遷移してもオブジェクトが消えないようにする
DontDestroyOnLoad(this);
}
}
public void OnChangedBGMSlider()
{
AudioManager.GetInstance().BGMVolume = bgmSlider.value;
bgmVolumeText.text = string.Format("{0:0.00}", bgmSlider.value);
}
public void OnChangedSESlider()
{
AudioManager.GetInstance().SEVolume = seSlider.value;
seVolumeText.text = string.Format("{0:0.00}", seSlider.value);
}
public void OnChangedVoiceSlider()
{
AudioManager.GetInstance().VoiceVolume = voiceSlider.value;
voiceVolumeText.text = string.Format("{0:0.00}", voiceSlider.value);
}
public void OnSETestButton()
{
AudioManager.GetInstance().PlaySound(7);
}
public void OnVoiceTestButton()
{
AudioManager.GetInstance().PlaySound2(0);
}
}
自分で試したこと
privateとstaticなどいろんなところにつけてみましたがうまくいきませんでした。
分かる方いましたらよろしくお願いします。