- Home /
Question by
nickking92 · Mar 26, 2018 at 03:58 PM ·
playerprefssliderinstancemusicsounds
seperate sliders for music and sound sliders
Hi,how to setup slider for sound effects? I have music slider and it works across all scenes,but cant figure it out how to do that for sound.I cant find solution anywhere on the internet This are my scripts for music.Any solution? :)
playerprefs
public class PlayerPrefsManager : MonoBehaviour {
const string MASTER_VOLUME_KEY = "music_volume";
const string MASTER_SOUND_KEY = "sound_volume";
public static void SetMasterVolume(float volume)
{
if (volume >= 0f && volume <= 1f)
{
PlayerPrefs.SetFloat(MASTER_VOLUME_KEY, volume);
}
else
{
Debug.LogError("Master volume out or range");
}
}
public static float GetMasterVolume()
{
return PlayerPrefs.GetFloat(MASTER_VOLUME_KEY);
}
public static void SetSoundVolume(float soundVolume)
{
if (soundVolume >= 0f && soundVolume <= 1f)
{
PlayerPrefs.SetFloat(MASTER_SOUND_KEY, soundVolume);
}
else
{
Debug.LogError("Master volume out or range");
}
}
public static float GetSoundVolume()
{
return PlayerPrefs.GetFloat(MASTER_SOUND_KEY);
}
}
music
public class Music: MonoBehaviour { private AudioSource Audio;
public AudioClip startClip;
public AudioClip gameClip;
static Music instance = null;
void Start()
{
Audio.volume = PlayerPrefsManager.GetMasterVolume();
if (instance != null && instance != this)
{
Destroy(gameObject);
}
else
{
instance = this; //ako je preuzeta ne ovo ne unistavaj
GameObject.DontDestroyOnLoad(gameObject);//uzima instancu game object i postarace se da ne unisti kad se pokrene
}
}
private void OnEnable() //this method is required to replace OnLevelWasLoaded().
{
SceneManager.sceneLoaded += OnSceneLoaded; // subscribe
}
private void OnDisable() //this method is required to replace OnLevelWasLoaded().
{
SceneManager.sceneLoaded -= OnSceneLoaded; //unsubscribe
}
private void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
{
Audio = GetComponent<AudioSource>();
if (scene.name == "MainMenu") //switched to scene.name since the previous methodology didn't work.
{
if (!Audio.isPlaying || Audio.clip != startClip)
{
Audio.clip = startClip;
Audio.Play();
}
}
if (scene.name == "Levels")
{
if (!Audio.isPlaying || Audio.clip != startClip)
{
Audio.clip = startClip;
Audio.Play();
}
}
if (scene.name == "Level1-Birds" || scene.name == "Level1-Wild" || scene.name == "Level1-Farm" || scene.name == "Level3" || scene.name == "Level3-1" || scene.name == "Level4-1" || scene.name == "Level4-2" || scene.name == "Level4-3")
{
if (!Audio.isPlaying || Audio.clip != gameClip)
{
Audio.clip = gameClip;
Audio.Play();
}
}
}
public void SetMusicVolume(float volume)
{
Audio.volume = volume;
}
}
option controller
public class OptionsController : MonoBehaviour {
public Slider musicSlider;
private Music music;
public LevelManager levelManager;
// Use this for initialization
void Start () {
music = GameObject.FindObjectOfType<Music>();
musicSlider.value = PlayerPrefsManager.GetMasterVolume();
}
// Update is called once per frame
void Update () {
music.SetMusicVolume(musicSlider.value);
}
public void SaveandExit()
{
PlayerPrefsManager.SetMasterVolume(musicSlider.value);
levelManager.LoadScene("MainMenu");
}
//public void SetDefaults()
//{
// volumeSlider.value = 0.8f;
// difficultySlider.value = 2f;
}
Comment
Your answer
Follow this Question
Related Questions
background music 4 Answers
PlayerPrefs Resets Automatically upon returning to the Main Menu 2 Answers
Music play throughout all scenes? 1 Answer
How to save slider values? 3 Answers
Multiple, independent volume sliders 1 Answer