U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 11 章 · 音频系统
/
第 172 课
LESSON 172 · 音频系统
播放背景音乐
背景音乐系统完成。下一课学播放音效。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 11 章 · 音频系统
📍 第 172 / 300 课
课程进度
172 / 300
🎯
本节学习目标
实现循环 BGM
实现音乐切换
实现跨场景延续
🚀
课程导读
游戏一开就有背景音乐、切换场景不停。本课做一个“打不死”的 BGM 系统。
◆
基础循环播放
最简单的 BGM。
创建空对象 BGM,加 AudioSource。
【设置】AudioClip 拖入背景音乐;勾选 Loop(循环);勾选 Play On Awake(开局就播)。
【音量】Volume 设 0.6 左右。
【播放】运行即响,循环不断。
【代码控制】
AudioSource bgm;
void Start() { bgm = GetComponent<AudioSource>(); }
public void PlayMusic(AudioClip clip) { bgm.clip = clip; bgm.Play(); }
public void StopMusic() { bgm.Stop(); }
public void SetVolume(float v) { bgm.volume = v; }
【切换音乐】换关卡时调用 PlayMusic(新音乐)。
【淡入淡出】切换时音量渐出渐入(协程)。
【注意】Loop 必须勾选,否则音乐播完就停。
💡
BGM 核心:Loop 循环 + Play On Awake + 代码可切换。
◆
跨场景延续(DontDestroyOnLoad)
切场景音乐不断。
【问题】切场景会销毁当前场景对象,BGM 停掉。
【解决】用 DontDestroyOnLoad 让 BGM 对象跨场景存活:
public class BGM : MonoBehaviour {
public static BGM Instance;
void Awake() {
if (Instance != null) { Destroy(gameObject); return; } // 防重复
Instance = this;
DontDestroyOnLoad(gameObject);
}
}
【说明】首个 BGM 保留并跨场景;重复进入时销毁新增的。
【完整单例音乐管理器】把 PlayMusic/SetVolume 等并入,全局可用(第 86 课单例)。
【切场景验证】从主菜单进游戏,音乐不断。
【注意】DontDestroyOnLoad 的对象会在场景切换时保留,注意别造成重复。
【进阶】按场景切换不同 BGM(在场景加载时触发切换)。
✅
跨场景 BGM = 单例 + DontDestroyOnLoad。所有全局管理器都用这套。
⚠
常见错误与排查
⛔
错误:
切场景后两个音乐同时响?
原因:
BGM 对象被重复创建
解决:
用单例检查 Instance 已存在则 Destroy 新对象(Awake 里)。
★
动手练习
课后小任务(做出来才算真的学会)
实现循环 BGM 并控制音量
用单例实现跨场景延续
实现切换不同 BGM
✓
本节小结
背景音乐系统完成。下一课学播放音效。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
音频系统总览与 AudioSource
下一课 →
播放音效与随机音调
↑