gpt4 book ai didi

c# - 统一 : Audio source gets destroyed after scene reloads

转载 作者:行者123 更新时间:2023-12-03 23:07:14 25 4
gpt4 key购买 nike

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

"The object of type 'AudioSource' has been destroyed."



有人可以帮忙吗?另外..我认为它是一个组件,而不是一个对象!可能两者都有,我不确定。

我如何让我的音乐连续:
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;
}

谢谢!

最佳答案

您的问题可能与此行有关

 if (instance != null)

这是一个单例模式,这一行的目的是防止单例类的两个实例存在,这是一个很大的禁忌。这意味着如果您尝试创建一个新对象但一个已经存在,它将销毁新对象。
但是,如果 Awake()由于任何原因在第一个单例上再次被调用,然后它会看到成员 instance不是 null并迅速自我毁灭。

解决方法是将其更改为:
 if (instance != null && instance != this)

这将防止您的单例自我毁灭。

关于c# - 统一 : Audio source gets destroyed after scene reloads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61715327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com