如何将背景音乐从一个场景更改为另一个场景?

Posted

技术标签:

【中文标题】如何将背景音乐从一个场景更改为另一个场景?【英文标题】:How can I change the background music from one scene to another? 【发布时间】:2022-01-24 00:42:18 【问题描述】:

我的游戏中只有两个场景。 第一个是菜单,第二个是游戏。 在第二个场景中,我添加了背景音乐,并确保在重新加载场景时音乐不会中断,但这意味着当返回菜单时,音乐会继续与菜单重叠。

你能给我任何解决方案吗?谢谢!

这是使音乐在场景重新加载时继续播放的代码:

using UnityEngine;
using UnityEngine.SceneManagement;

public class BackgroundMusic : MonoBehaviour

    private static BackgroundMusic backgroundMusic;
    
    void Awake()
    
    
       if (backgroundMusic == null)
        
            backgroundMusic = this;
            DontDestroyOnLoad(backgroundMusic);
            Debug.Log(SceneManager.GetActiveScene().name);
        
        else
        
            Destroy(gameObject);
        
    


【问题讨论】:

请使用正确的标签!请注意,unityscript 是或更好的是曾经是一种 javascript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在早已弃用了!你的代码在c# 【参考方案1】:

在两个场景中放置带有BackgroundMusic 脚本的相同游戏对象。由于您实现了单例模式,这将确保一次只能播放 1 个音乐播放器。

现在订阅SceneManager.sceneLoaded,这样你就可以根据场景改变音乐,像这样:

using UnityEngine.SceneManagement;

public class BackgroundMusic : MonoBehaviour

    private static BackgroundMusic backgroundMusic;

    void Awake() 
     
        // Keep singleton pattern implementation here 
        SceneManager.onSceneLoaded += SwitchMusic;
    

    void SwitchMusic()
    
        // Logic to change music tracks here.
        // You could have an array of AudioClip and index 
        // that array by the scene's build index, for instance.

        // You can also just check if scenes actually changed, and if not,
        // you can make the music just continue without changing.
    

如果您有任何问题,请在 cmets 中告诉我。

【讨论】:

SceneManager.onSceneLoaded 给我一个错误:SceneManager' 不包含'onSceneLoaded' 的定义 对不起,这是sceneLoaded,而不是onSceneLoaded。 (documentation) 好的,现在可以了。你能告诉我如何通过脚本改变音乐曲目吗? 取决于你到底想做什么。如果您计划在整个游戏中只有 2 个场景,我会在 2 个AudioClips 之间切换,但如果您想稍后扩展并拥有超过 2 个场景,您可能希望包含不切换如果场景过渡在两个场景之间,则应该在背景中播放相同的音乐曲目。无论如何,您可能应该为此提出一个新问题(我会密切关注您的个人资料,看看您是否发布了一个新问题),如果我的回答有效,接受/支持它将不胜感激。跨度>

以上是关于如何将背景音乐从一个场景更改为另一个场景?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

如何将 PNG 图像的背景和前景色更改为从颜色托盘中选择?

如何更改背景选择的颜色故事板静态单元格

Mogrify / ImageMagick 将 jpeg 背景从灰色更改为白色

如何将 SVG 的填充颜色更改为背景图像? [复制]