如何将背景音乐从一个场景更改为另一个场景?
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 个AudioClip
s 之间切换,但如果您想稍后扩展并拥有超过 2 个场景,您可能希望包含不切换如果场景过渡在两个场景之间,则应该在背景中播放相同的音乐曲目。无论如何,您可能应该为此提出一个新问题(我会密切关注您的个人资料,看看您是否发布了一个新问题),如果我的回答有效,接受/支持它将不胜感激。跨度>
以上是关于如何将背景音乐从一个场景更改为另一个场景?的主要内容,如果未能解决你的问题,请参考以下文章
当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色
如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton