Unity:场景重新加载后音频源被销毁

4
我刚为我的小测试游戏引入了暂停选项。我有一个背景音频(整个游戏都在播放,即使场景改变时也是如此),所以我决定在游戏暂停时停止音乐。但出现了错误,只要游戏重新加载或更改场景就会弹出以下错误:

"AudioSource 类型的对象已被摧毁。"

能否有人帮忙解决一下?而且... 我认为这是组件,而不是对象!可能两者都有,我不确定。

如何让我的音乐持续播放:

void Awake()
{
    if (instance != null)
    {
        Destroy(gameObject);
    }
    else
    {
        instance = this;
        GameObject.DontDestroyOnLoad(gameObject);
    }      
}

我的暂停菜单:

public static bool GameIsPaused = false;
public GameObject pauseMenuUI;
public AudioSource song;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape))
    {
        if (GameIsPaused)
        {
            Resume();
        }
        else
        {
            Pause();
        }
    }
}

void Resume()
{
    pauseMenuUI.SetActive(false);
    Time.timeScale = 1f;
    GameIsPaused = false;
    song.mute = false;
}

void Pause()
{
    pauseMenuUI.SetActive(true);
    Time.timeScale = 0f;
    GameIsPaused = true;
    song.mute = true;
}

感谢您!
2个回答

3

你的问题可能出在这一行代码

 if (instance != null)

这是一个单例模式,该行的目的是防止存在两个单例类实例,这是不可接受的。这意味着如果您尝试创建一个新对象,但已存在一个对象,则会销毁新对象。
但是,如果Awake()在第一个单例上由于任何原因再次调用,则会发现成员变量instance不为null,并立即销毁自身。
解决方法是将其更改为以下内容:
 if (instance != null && instance != this)

这将防止你的单例自我销毁。

2

我相信问题出在暂停菜单脚本中的音频变量上。我认为暂停菜单会在新场景加载时与AudioSource断开联系。要检查这一点,请进入游戏模式并加载一个新场景。进入新场景后,转到层次结构并单击具有暂停菜单脚本的GameObject。现在检查公共变量AudioSource是否有任何关联。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接