【问题标题】: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#

标签: c# unity3d scene


【解决方案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 个场景,您可能希望包含不切换如果场景过渡在两个场景之间,则应该在背景中播放相同的音乐曲目。无论如何,您可能应该为此提出一个新问题(我会密切关注您的个人资料,看看您是否发布了一个新问题),如果我的回答有效,接受/支持它将不胜感激。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多