UE4笔记2 背景音乐的操作
在播放场景时,常常都会有播放背景音乐的需求,如果要播放背景音乐,可以使用UE4的UAudioComponent组件
在蓝图中使用:
新建一个HUD蓝图,命名为MyGameHUD_BP,将MyGameHUD_BP打开,添加组件-AudioComponent,给AudioComponent设置一个音乐,再添加一个
OnAudioFinished事件(用于播放完了过后重新播放),在里面添加逻辑:
设置定时器,给定时器分配5秒的事情,是否循环选择false,时间到了过后调用Play方法,组件是刚刚创建的AudioComponent。
然后在BeginPlay事件中添加Play方法,组件是刚刚创建的AudioComponent
将HUD分配给当前的GameMode,然后运行,这个时候你就会发现背景音乐就成功响起来了。
在C++中使用:
新建一个HUD类,命名为MyGameHUD
新建一个GameModeBase类,命名为MyGameModeBase
在MyGameModeBase构造函数中添加以下代码:
HUDClass = MyGameHUD::StaticClass();
头文件:
#include "Components/AudioComponent.h"
在HUD添加一个成员变量:
class UAudioComponent* BkSoundPlayer;
在HUD构造函数中添加以下代码:
static ConstructorHelpers::FObjectFinder<USoundCue> BKSoundCueObject(TEXT("SoundCue'/Game/Sounds/HallMenuBKSound.HallMenuBKSound'"));
BkSoundCue = BKSoundCueObject.Object;
BkSoundPlayer = CreateDefaultSubobject<UAudioComponent>(TEXT("BkSoundPlayer"));
BkSoundPlayer->SetupAttachment(RootComponent); //RootComponent是根组件,Actor都会有这个RootComponent可挂载
BkSoundPlayer->SetSound(BkSoundCue); //HallMenuBkSoundCue是一个音乐
BkSoundPlayer->OnAudioFinished.AddDynamic(this, &MyGameHUD::OnHallMenuBkSoundFinished); //当绑定一个播放结束后事件函数
游戏开始后播放音乐,那么在MyGameHUD的BeginPlay函数中添加以下代码:
BkSoundPlayer->Play(); //播放音乐
事件回调:
void MyGameHUD::OnHallMenuBkSoundFinished()
{
GetWorld()->GetTimerManager().SetTimer(BackgroundSoundTimerHandle, this,
&MyGameHUD::BackgroundSoundTimerHandleCallback, 5.0f, false); //设置定时器延时5秒,只运行一次
}
void MyGameHUD::BackgroundSoundTimerHandleCallback()
{
BkSoundPlayer->Play(); //定时时间到了过后就播放音乐
}
以上就完成了背景音乐的播放
但是要注意的是,在BkSoundPlayer->OnAudioFinished.AddDynamic这句代码添加的回调函数必须得是UFUNCTION,也就是在MyGameHUD类定义的头文件中,
BackgroundSoundTimerHandleCallback函数必须得定义成UFUNCTION,如下所示:
UFUNCTION()
void BackgroundSoundTimerHandleCallback();
AudioComponent还能调整音量等各种关于声音的操作,
比如调节音量为百分之50:
Adjust Volume Duration:声音改变需要的时间(自动淡出淡入)
Adjust Volume Level: 声音音量的百分比大小
BkSoundPlayer->AdjustVolume(0.0f, 0.5f);