12. 3D空间音频与特效
2026/4/14大约 3 分钟
3D空间音频与特效
好的音效和视觉特效能让你的游戏从"还行"变成"真不错"。这一章回答:3D 声音怎么随距离变化?粒子特效怎么在 3D 空间中使用?
3D 空间音频
什么是空间音频
在 2D 游戏中,所有声音都是"平"的——不管声音从哪来,听起来都一样。但在 3D 游戏中,声音应该有方向感和距离感:
- 敌人在你左边开枪 → 声音从左边传来
- 爆炸在远处 → 声音很轻
- 车从你旁边开过 → 声音从一边移到另一边
AudioStreamPlayer3D
Godot 使用 AudioStreamPlayer3D 节点实现 3D 空间音频。
与普通 AudioStreamPlayer 的区别:
| 节点 | 特点 | 适用场景 |
|---|---|---|
AudioStreamPlayer | 不考虑空间位置 | 背景音乐、UI 音效 |
AudioStreamPlayer3D | 声音随位置变化 | 游戏世界中的音效 |
关键参数
| 参数 | 作用 |
|---|---|
Volume dB | 基础音量 |
Max Distance | 最远听距(超过就听不到了) |
Attenuation Model | 衰减方式(声音随距离变小的规律) |
Emission Angle | 发射角度(只在某个方向能听到) |
Area Mask | 音频区域遮罩 |
C#
// C#: 播放 3D 音效
var audioPlayer = GetNode<AudioStreamPlayer3D>("GunSound");
audioPlayer.Play();GDScript
# GDScript: 播放 3D 音效
var audio_player = $GunSound
audio_player.play()Listener(听者)
AudioListener3D 是"耳朵"的位置。通常附加在摄像机上,这样玩家听到的声音就和看到的方向一致。
音频总线(Audio Bus)
音频总线是 Godot 的音频处理系统,可以添加效果:
- 低通滤波器:让声音变闷(像隔着墙听到的声音)
- 混响:添加回声效果(山洞、大厅)
- 压缩器:让音量更均匀
- 延迟:添加回声
在底部"Audio"面板中可以创建和管理音频总线。
3D 粒子特效
GPUParticles3D
GPUParticles3D 是 Godot 4.x 的 3D 粒子系统。它能做出:
- 爆炸效果
- 烟雾
- 火焰
- 雨雪
- 魔法光效
基本使用
- 添加
GPUParticles3D节点 - 在
Process Material中创建New ParticleProcessMaterial - 调整参数:
| 参数 | 作用 |
|---|---|
Emission Shape | 粒子从哪产生(点、球、盒子) |
Direction | 粒子飞向哪个方向 |
Spread | 扩散角度 |
Gravity | 粒子受的重力 |
Initial Velocity | 初始速度 |
Amount | 粒子数量 |
- 在
Draw Passes中设置粒子长什么样(通常用小方块或小球)
粒子材质效果
ParticleProcessMaterial 支持很多高级效果:
- 颜色渐变:粒子从一种颜色变到另一种颜色
- 大小曲线:粒子先变大再变小
- 湍流:让粒子随机飘动
- 吸引子:让粒子被某个点吸引(像黑洞)
- 碰撞:粒子碰到物体后反弹
常见特效实现
爆炸
粒子形状:Sphere
方向:向外(Spread 180°)
初始速度:较大
重力:较小
颜色:白 → 黄 → 橙 → 红 → 透明
大小:先大后小
生命周期:0.5-1秒烟雾
粒子形状:Sphere
方向:向上
初始速度:中等
重力:向上(模拟热气上升)
颜色:灰 → 深灰 → 透明
大小:逐渐变大
生命周期:2-4秒火焰
粒子形状:Box(窄)
方向:向上
初始速度:中等
重力:无或轻微向上
颜色:白 → 黄 → 橙 → 红 → 透明
大小:先大后小
生命周期:0.3-0.8秒常见问题
3D 音效听不到?
- 检查
Max Distance是否太小 - 检查场景中是否有
AudioListener3D(通常在摄像机上) - 检查音频总线是否被静音
粒子看不到?
- 检查
Draw Passes是否设置了粒子外观 - 检查
Amount是否大于 0 - 检查粒子生命周期和速度是否合理
- 确认
Emitting属性为true
粒子性能差?
- 减少
Amount(粒子数量) - 减小粒子的复杂度
- 远处的粒子系统可以设为较低质量
