【问题标题】:Music is not getting stop when scene reload in unity统一重新加载场景时音乐不会停止
【发布时间】:2019-06-13 21:10:28
【问题描述】:

我正在使用切换按钮来播放和停止音乐,我正在使用 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 类在重新加载时被销毁。 感谢您的帮助。

【问题讨论】:

  • 音频设置为在唤醒时播放。我会说不要在清醒状态下玩,但如果需要,可以将其设置为播放。
  • 在加载场景时可以检查切换按钮的默认值吗?也许您可以通过添加else { t.isOn = false; }来确保MusicToggleButton中切换按钮的值
  • 谢谢你们的回答。是的,托马斯,我没有把它设置成清醒状态。我想我找到了问题所在。当我重新加载场景时。在清醒时,我正在改变 t.isOn=true。那就是调用将音乐从关闭更改为打开的方法。因为当场景加载切换状态为关闭并且内部清醒时,我将其更改为打开。把事情搞砸了。我认同。现在我该怎么办?
  • **我在谷歌上搜索过。这是切换的问题。我应该将切换按钮更改为普通按钮。谢谢你们的时间。

标签: c# unity3d


【解决方案1】:

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

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

【讨论】:

  • 非常感谢。我没有意识到这一点。每次我设置播放器偏好值时,您都在说。我应该写 PlayerPrefs.Save(); ?
  • 虽然 Unity 会在 OnApplicationQuit 中自动保存首选项,但仍然存在无法保存 PlayerPrefs 的情况。所以是的,你应该。更多详情请关注docs.unity3d.com/ScriptReference/PlayerPrefs.Save.html
  • 非常感谢星期六。
【解决方案2】:

解决方案非常简单。如果有人想知道。只需将切换按钮更改为普通按钮即可。在 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;
        }
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多