我刚刚在我的小测试游戏中引入了暂停选项。我的背景音乐(即使场景发生变化也可以播放整个游戏),所以我决定在游戏暂停时停止音乐播放。出于某种原因,直到游戏重新加载/更改场景时,它才能正常工作。
然后弹出错误
“'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;
}
谢谢!
答案 0 :(得分:2)
肯定是暂停菜单脚本中的音频变量。我认为暂停菜单会在新的场景加载时与AudioSrouce脱离关联。要检查这一点,请进入游戏模式并加载新场景。在新场景中,转到层次结构,然后单击上面带有暂停菜单脚本的GameObject。现在检查公共var AudioSource是否有任何关联。
答案 1 :(得分:1)
您的问题可能出在这里
if (instance != null)
这是一个单例模式,此行的目的是防止存在您的单例类的两个实例,这是很大的禁忌。这意味着,如果尝试创建一个新对象但已经存在一个新对象,它将破坏该新对象。
但是,如果在第一个单例中出于任何原因再次调用Awake()
,那么它将看到成员instance
不是null
并立即销毁自己。
一种解决方法是将其更改为此:
if (instance != null && instance != this)
这将防止您的单身人士自我毁灭。