第 18 天:音频系统,给你的游戏加点声音!
本节介绍 Unreal Engine 5 音频系统 的核心功能,包括 背景音乐 (BGM)、角色脚步声、交互音效 和 3D 空间音效。我们将使用 UGameplayStatics::PlaySound2D 播放 BGM,让角色在行走时自动触发脚步声,并在 UI 交互时播放音效。此外,我们将创建 3D 空间音效,使声音随玩家位置动态变化,增强沉浸感。通过本节,你将掌握 如何在游戏中添加和控制声音,提
🎯 目标
✅ 掌握 UE5 音频系统的基础
✅ 实现背景音乐 (BGM) 播放
✅ 为角色添加脚步声 & 交互音效
✅ 使用 3D 空间音效增强沉浸感
1️⃣ Unreal Engine 5 音频系统简介
UE5 提供了强大的音频引擎,支持:
- 背景音乐(BGM):持续播放的游戏音乐
- 交互音效:如 UI 点击、拾取物品等
- 角色音效:如脚步声、攻击音效
- 3D 空间音效:基于位置的音效,如远处的爆炸声、环境音效
🎯 本节目标
- 使用
Sound Cue播放 BGM - 给角色添加脚步声
- 实现交互音效
- 让 3D 空间音效随玩家位置变化
2️⃣ 播放背景音乐 (BGM)
🔹 1. 导入背景音乐
- 在
Content Browser里,右键Import导入.wav音频文件 - 创建
Sound Cue(可选)- 右键音频 →
Create Sound Cue - 双击打开
Sound Cue,可以添加 淡入淡出、循环 等效果
- 右键音频 →
- 命名为
SC_BackgroundMusic
🔹 2. 在 C++ 播放 BGM
📌 修改 GameMode.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "Sound/SoundBase.h"
#include "MyGameMode.generated.h"
UCLASS()
class MYGAME_API AMyGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
UPROPERTY(EditAnywhere, Category = "Audio")
USoundBase* BackgroundMusic;
};
📌 修改 GameMode.cpp
#include "MyGameMode.h"
#include "Kismet/GameplayStatics.h"
void AMyGameMode::BeginPlay()
{
Super::BeginPlay();
// **播放背景音乐**
if (BackgroundMusic)
{
UGameplayStatics::PlaySound2D(GetWorld(), BackgroundMusic);
}
}
🔹 3. 在蓝图中设置 BGM
- 打开
GameMode蓝图 - 在
BackgroundMusic里选择SC_BackgroundMusic - 运行游戏,检查音乐是否正常播放
✅ 背景音乐将在 GameMode 启动时自动播放!
3️⃣ 添加角色脚步声
🔹 1. 导入脚步音效
- 导入
.wav文件 - 创建
Sound Cue,命名SC_Footsteps - 在
Sound Cue里- 添加多个脚步音效
- 连接
Random Node,让脚步音效随机播放
- 保存 & 关闭
🔹 2. 在 C++ 绑定脚步声
📌 修改 PlayerCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Sound/SoundBase.h"
#include "PlayerCharacter.generated.h"
UCLASS()
class MYGAME_API APlayerCharacter : public ACharacter
{
GENERATED_BODY()
public:
APlayerCharacter();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere, Category = "Audio")
USoundBase* FootstepSound;
void PlayFootstepSound();
};
📌 修改 PlayerCharacter.cpp
#include "PlayerCharacter.h"
#include "Kismet/GameplayStatics.h"
APlayerCharacter::APlayerCharacter()
{
PrimaryActorTick.bCanEverTick = true;
}
void APlayerCharacter::BeginPlay()
{
Super::BeginPlay();
}
void APlayerCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// **检测角色是否移动**
if (GetVelocity().Size() > 10.f)
{
PlayFootstepSound();
}
}
void APlayerCharacter::PlayFootstepSound()
{
if (FootstepSound && GetCharacterMovement()->IsMovingOnGround())
{
UGameplayStatics::PlaySoundAtLocation(GetWorld(), FootstepSound, GetActorLocation());
}
}
🔹 3. 在蓝图中设置脚步音效
- 打开
BP_PlayerCharacter - 在
FootstepSound里选择SC_Footsteps - 运行游戏,检查角色移动时是否播放脚步声
✅ 现在,角色行走时会自动播放脚步声!
4️⃣ 交互音效
🔹 1. 导入 UI 点击音效
- 导入
.wav音频 - 创建
Sound Cue,命名SC_UI_Click - 设置为短促音效
🔹 2. 在蓝图绑定 UI 音效
- 打开
WBP_MainMenu - 选中
StartGameButton - 在
OnClicked事件中- 调用
Play Sound 2D - 选择
SC_UI_Click
- 调用
- 保存 & 关闭
✅ 点击按钮时,会播放 UI 交互音效!
5️⃣ 3D 空间音效
🔹 1. 创建 3D 环境音效
- 导入环境音效
.wav - 右键音频文件 →
Create Sound Cue - 双击
Sound Cue- 勾选
Attenuation(衰减) - 调整
3D Sound Settings - 设置
Radius,让音效在一定距离内可听见
- 勾选
- 保存 & 关闭
🔹 2. 在场景中放置 3D 音效
- 在
GameLevel里 - 拖拽
SC_EnvironmentSound到场景 - 在
Details里,勾选Auto Activate - 运行游戏,检查声音是否随玩家远近变化
✅ 3D 音效现在可以根据玩家位置播放!
🎯 总结
✅ 使用 UGameplayStatics::PlaySound2D 播放背景音乐
✅ 绑定角色脚步声,让角色移动时播放音效
✅ 在 UI 交互中播放音效,增强反馈体验
✅ 创建 3D 空间音效,实现真实的音频环境
🎮 现在,你的游戏拥有动态音效,让游戏更加沉浸!🚀
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)