HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 44 课
MODULE 4 · UI 界面 · 动画 · 特效
第 44 课 · 音效与背景音乐
🎯 本课学习目标
- 导入音频资源
- 用 AudioStreamPlayer 播放音效
- 循环播放背景音乐
好游戏离不开声音。本课学会播放音效与背景音乐。
📖 详细教学步骤
导入音频文件素材
- 准备音频文件(WAV/MP3/OGG 等)
- 拖入资源面板的 audio/ 文件夹
- 点击文件可在底部查看播放
💡 音效推荐 WAV(清晰)、音乐推荐 OGG/MP3(体积小)。
播放音效实操
- 添加节点
AudioStreamPlayer,命名 SfxPlayer - 检查器 Stream → 选择音频文件
- 用代码播放:
GDSCRIPTextends Node
@onready var sfx: AudioStreamPlayer = $SfxPlayer
func play_coin():
sfx.stream = load("res://audio/coin.wav")
sfx.play() # 从头播放
播完自动停止 & 音量属性
- Volume dB:音量(0 正常,-10 更小,负无穷静音)
- Pitch Scale:音调(1 正常,2 变尖,0.5 变低沉)
- 检测播完:监听
finished信号 - 常用:
sfx.pitch_scale = randf_range(0.9, 1.1)让音效不单调
背景音乐(循环)实操
音乐单独用一个节点,循环播放:
GDSCRIPTextends Node
@onready var music: AudioStreamPlayer = $Music
func _ready():
music.stream = load("res://audio/bgm.ogg")
music.autoplay = true # 进入场景自动播
music.volume_db = -6 # 音乐小一点,不抢音效
# 循环:检查器 Music 节点的 Stream 里设置循环,或代码:
# music.stream.loop_mode = AudioStreamWAV.LOOP_FORWARD
音乐切换与淡入淡出进阶
切 BGM 用 Tween 淡入淡出更专业:
GDSCRIPTfunc crossfade_music(new_stream):
var tween = create_tween()
tween.tween_property(music, "volume_db", -30.0, 1.0) # 淡出
tween.tween_callback(func():
music.stream = new_stream
music.play()
)
tween.tween_property(music, "volume_db", -6.0, 1.0) # 淡入
音效播放器的坑注意
一个 AudioStreamPlayer 同时只能播一个音效,连续快速触发会重头播。解决:
- 用多个播放器实例(轮换)
- 或用
AudioStreamPlayer2D做带定位的声音(第 45 课) - 音效不宜过长,0.1-2 秒最佳
⚠️
没有声音?
检查:①系统/编辑器音量;②Stream 是否设置;③是否调用了 play();④Volume dB 是否太低(-80 以下基本听不到)。
⚠️
音效每次被重置(听不出连续)?
单播放器会重头播。快速音效用多个实例或 AudioStreamPlayer2D。
🧪 动手试一试
🏋️ 课后练习
给金币加「叮」音效、给跳跃加音效,并配一段循环背景音乐,音量合适不刺耳。
SFX 用 AudioStreamPlayer + play();BGM 用 autoplay + 循环 + 音量 -6dB。
💡
给不同音效设置不同 pitch_scale,让音效不单调。
💡
背景音乐单独一个播放器,音效用另一个,方便分别调音量。
🎓 本课小结
AudioStreamPlayer 播放音频:Stream 设文件、play() 播放、Volume dB 调音量、Pitch Scale 调音调;BGM 循环 + autoplay;多音效用多实例。