c# - 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;
}
谢谢!
解决方案
您的问题可能与此行有关
if (instance != null)
这是一个单例模式,这一行的目的是防止单例类的两个实例存在,这是一个很大的禁忌。这意味着如果您尝试创建一个新对象但一个已经存在,它将破坏新对象。
但是,如果Awake()
在第一个单例上出于任何原因再次调用,那么它将看到该成员instance
不是null
并立即销毁自己。
解决方法是将其更改为:
if (instance != null && instance != this)
这将防止你的单身人士破坏自己。
推荐阅读
- python - 嵌套 For 循环的更有效替代方案
- python - 如何使用 Python 将列表中的多维数据插入 MYSQL
- c - C中的CSV文件行平均值
- r - 将线性回归的输出与 R 中的常数相乘
- android - 当 Firebase 数据发生更改时,从前台通知打开活动
- java - 解析yaml而不为每个参数创建变量
- python - 从窗口中删除文本
- php - JQuery 切换函数停止工作 PHP 7.4
- angular - 显示/隐藏角度分量(我需要根据点击切换(显示或隐藏)这两个角度分量)
- ruby-on-rails - Ruby on Rails:在模型上添加验证后如何迁移更改?