【问题标题】:Unity: Audio source gets destroyed after scene reloadsUnity:场景重新加载后音频源被破坏
【发布时间】:2020-05-10 16:34:13
【问题描述】:

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

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


    【解决方案1】:

    您的问题可能与这里的这一行有关

     if (instance != null)
    

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

    解决方法是将其更改为:

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

    这将防止你的单身人士自我毁灭。

    【讨论】:

      【解决方案2】:

      很确定这是暂停菜单脚本中的音频变量。我认为暂停菜单在新场景加载时会与 AudioSrouce 分离。要检查这一点,请进入游戏模式并加载新场景。在新场景中,转到层次结构并单击上面带有暂停菜单脚本的游戏对象。现在检查公共 var AudioSource 是否有任何关联。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-20
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多