首页 > 解决方案 > Unity:场景重新加载后音频源被破坏

问题描述

我刚刚在我的小测试游戏中引入了暂停选项。我在背景中有音频(在整个游戏中播放,即使场景发生变化),所以我决定在游戏暂停时停止音乐。出于某种原因,它工作得很好,直到游戏重新加载/更改场景。
然后弹出一个错误

“‘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;
}

谢谢!

标签: c#unity3d

解决方案


您的问题可能与此行有关

 if (instance != null)

这是一个单例模式,这一行的目的是防止单例类的两个实例存在,这是一个很大的禁忌。这意味着如果您尝试创建一个新对象但一个已经存在,它将破坏新对象。
但是,如果Awake()在第一个单例上出于任何原因再次调用,那么它将看到该成员instance不是null并立即销毁自己。

解决方法是将其更改为:

 if (instance != null && instance != this)

这将防止你的单身人士破坏自己。


推荐阅读