Godot 音频 — 快速参考¶
最后验证:2026-02-12 | 引擎:Godot 4.6
自 ~4.3(LLM 知识截止)以来的变更¶
在 4.4–4.6 中,音频 API 没有重大破坏性变更。核心音频系统保持稳定。主要更新是一些工作流改进:
4.6 变更¶
- 本版本没有音频相关的破坏性变更。
4.5 变更¶
- 本版本没有音频相关的破坏性变更。
当前 API 模式¶
播放音频¶
@onready var sfx_player: AudioStreamPlayer = %SFXPlayer
@onready var music_player: AudioStreamPlayer = %MusicPlayer
func play_sfx(stream: AudioStream) -> void:
sfx_player.stream = stream
sfx_player.play()
func play_music(stream: AudioStream, fade_time: float = 1.0) -> void:
var tween: Tween = create_tween()
tween.tween_property(music_player, "volume_db", -80.0, fade_time)
await tween.finished
music_player.stream = stream
music_player.volume_db = 0.0
music_player.play()
3D 空间音频¶
@onready var audio_3d: AudioStreamPlayer3D = %AudioPlayer3D
func _ready() -> void:
audio_3d.max_distance = 50.0
audio_3d.attenuation_model = AudioStreamPlayer3D.ATTENUATION_INVERSE_DISTANCE
audio_3d.unit_size = 10.0
音频总线¶
# Set bus volumes
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(&"Music"), volume_db)
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(&"SFX"), volume_db)
# Mute a bus
AudioServer.set_bus_mute(AudioServer.get_bus_index(&"Music"), true)
SFX 的对象池化¶
# Pre-create multiple AudioStreamPlayer nodes for concurrent sounds
var _sfx_pool: Array[AudioStreamPlayer] = []
func _ready() -> void:
for i in range(8):
var player := AudioStreamPlayer.new()
player.bus = &"SFX"
add_child(player)
_sfx_pool.append(player)
func play_pooled(stream: AudioStream) -> void:
for player in _sfx_pool:
if not player.playing:
player.stream = stream
player.play()
return
常见错误¶
- 在运行时创建新的 AudioStreamPlayer 节点,而不是进行对象池化
- 未使用音频总线来管理音量分类(Music、SFX、UI、Voice)
- 使用
_process()处理音频时序,而不是使用信号(finished)
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/Claude-Code-Game-Studios