场景重新统一加载时音乐不会停止

时间:2019-06-13 05:19:57

标签: c# unity3d

我正在使用切换按钮播放和停止音乐,并且正在使用playerPrefs保存状态。切换按钮正在播放或停止音乐,但是当我重新加载场景时,它变得混乱了。即使打开切换按钮,音乐仍会继续播放(意味着将音乐设置为关闭)。

对于播放器偏好。我正在使用Player prefs Manager脚本:

public static void SetMusicOnOFF(int value)
{
    PlayerPrefs.SetInt(Music, value);      
}

public static int GetMusicOnOff()
{
    return PlayerPrefs.GetInt(Music, 5);
}

我正在使用的切换按钮

class MusicToggleButton : MonoBehaviour
{
    Toggle t;
    // Use this for initialization
    void Start ()
    {
        t = GetComponent<Toggle>();

        if (PlayerPrefsManager.GetMusicOnOff() == 1)
        { //ERROR CALLING THE METHOD TO CHANGE MUSIC TO ON
            t.isOn = true;
        }          
    }

按下切换按钮时,我将调用StartStopMusicPlayer方法:

class MusicPlayer : MonoBehaviour
{
    public static bool stopPlayer;

    // Use this for initialization
    void Awake ()
    {
        if (PlayerPrefsManager.GetMusicOnOff() == 2)
        {  
            audioSource.Play();
            audioSource.playOnAwake = true;
            audioSource.loop = true;
        }
        else
        {
            audioSource.Stop();
        }
    }

    public void StartStopMusicPlayer()
    {
        stopPlayer = !stopPlayer;
        if (stopPlayer)
        {
            PlayerPrefsManager.SetMusicOnOFF(1);
            audioSource.Stop();
        }
        else
        {
            PlayerPrefsManager.SetMusicOnOFF(2);
            audioSource.Play();
        }
    } 
}

音乐播放器类在重新加载时不会被破坏。但是MusicToggleButton类在重新加载时被破坏。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

仅调用PlayerPrefs.SetInt(Music,value)是不够的。之后,您应该调用PlayerPrefs.Save()。否则您的更改将在重启后生效。

public static void SetMusicOnOFF(int value)
{
    PlayerPrefs.SetInt(Music, value);
    PlayerPrefs.Save();
}

答案 1 :(得分:0)

解决方案是如此简单。如果有人想知道。只需将切换按钮更改为普通按钮即可。和在MusicToggleButton类中。

public class MusicToggleButton : MonoBehaviour
{
    public Image offOnImage;
    public bool changeValue;
    public Color TargetColor;
    public Color originalColor;
    // Use this for initialization
    void Start ()
    {
        changeValue = !(PlayerPrefsManager.GetMusicOnOff() == 1);
        if (PlayerPrefsManager.GetMusicOnOff() == 1)
        {
            Debug.Log("stop Music");
            offOnImage.color = TargetColor;
        }
        else
        {
            Debug.Log("Playing Music");
            offOnImage.color = originalColor;
        }
    }

    public void musicButtonClick()
    {
        changeValue = !changeValue;
        if (changeValue)
        {
            //Debug.Log("changing to target color");
            //offOnImage.CrossFadeColor(TargetColor, 0.5f, false, false);
            offOnImage.color = originalColor;
            Debug.Log("Playing");
        }
        else
        {
            //Debug.Log("changing to original color");
            //offOnImage.CrossFadeColor(Color.white, 0.5f, false, false);
            Debug.Log("pause");
            offOnImage.color = TargetColor;
        }
    }
}

这将播放和暂停音乐。就像切换按钮一样。