Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d Unity,我对DontDestroyOnLoad有问题,无法在不同场景中跟踪_Unity3d - Fatal编程技术网

Unity3d Unity,我对DontDestroyOnLoad有问题,无法在不同场景中跟踪

Unity3d Unity,我对DontDestroyOnLoad有问题,无法在不同场景中跟踪,unity3d,Unity3d,我是新来的,我有一个问题 我正在制作一个有两个场景(主菜单场景和游戏场景)的游戏,我把我的音乐放在主菜单场景上。我制作了一个空的游戏对象,并在其中附加音频源(音乐),我还附加了如下脚本: 第一稿 公共静态KeepTheMusicOn实例; 无效唤醒() { 如果(!实例) 实例=此; 其他的 摧毁(这个游戏对象); DontDestroyOnLoad(this.gameObject); } 使用该脚本,我可以在第二个场景中继续播放音乐,而无需重新启动音乐,并且在主菜单中,如果我设置了静音按钮,

我是新来的,我有一个问题 我正在制作一个有两个场景(主菜单场景和游戏场景)的游戏,我把我的音乐放在主菜单场景上。我制作了一个空的游戏对象,并在其中附加音频源(音乐),我还附加了如下脚本:

第一稿

公共静态KeepTheMusicOn实例;
无效唤醒()
{
如果(!实例)
实例=此;
其他的
摧毁(这个游戏对象);
DontDestroyOnLoad(this.gameObject);
}
使用该脚本,我可以在第二个场景中继续播放音乐,而无需重新启动音乐,并且在主菜单中,如果我设置了静音按钮,则该按钮将运行我的第二个脚本

第二个脚本:

公共音频源主音乐;
公共无效更新()
{
DontDestroyOnLoad(主音乐);
}
公共空间音乐关闭()
{
if(mainMusic.isPlaying)
{
主音乐。暂停();
}
其他的
{
主音乐。取消暂停();
}
}
我的问题是当我开始游戏时,我在我的主菜单中,我可以用按钮将音乐静音,但当我进入游戏场景并返回菜单时,按钮什么也不做。
这就是我的问题,我希望任何人都能帮助我。对不起,我的英语不好。

听起来像是在切换场景时你破坏了按钮。当您将它们返回主菜单时,您将销毁音频控制器的重复实例thing=>按钮中配置的引用将丢失


在您的情况下,既然您使用了公共单例,那么您也可以(ab)使用它,并将一个组件放在
按钮本身上(这样引用就不会丢失),然后执行如下操作:

[RequireComponent(按钮类型))]
公共类音乐按钮:单一行为
{
[序列化字段]专用按钮;
私人空间
{
如果(!button)button=GetComponemt();
//动态添加回调函数
//它不会出现在编辑器中,但会在onClick中调用
button.onClick.AddListener(OnClicked);
}
私有void OnClicked()
{
KeepTheMusicOn.Instance.MusicOnOff();
}
}

如果您喜欢在编辑器中查看它,当然也可以从
Awake
中查看它,将
onClick
公开,并在按钮的
onClick
事件中手动引用它。

不确定第二个脚本是什么,但是,它不需要执行destroyonload每个帧。。如果第一个脚本是主音乐游戏对象的一部分,那就足够了。如果第二个脚本位于场景中,或者不是该主要音乐游戏对象的一部分,则每个场景都需要找到该主要音乐游戏对象,因为它可能已经在其中,不再相关