UE4筆記2 背景音樂的操作
在播放場景時,常常都會有播放背景音樂的需求,如果要播放背景音樂,可以使用UE4的UAudioComponent組件
在藍(lán)圖中使用:
新建一個HUD藍(lán)圖,命名為MyGameHUD_BP,將MyGameHUD_BP打開,添加組件-AudioComponent,給AudioComponent設(shè)置一個音樂,再添加一個
OnAudioFinished事件(用于播放完了過后重新播放),在里面添加邏輯:
設(shè)置定時器,給定時器分配5秒的事情,是否循環(huán)選擇false,時間到了過后調(diào)用Play方法,組件是剛剛創(chuàng)建的AudioComponent。
然后在BeginPlay事件中添加Play方法,組件是剛剛創(chuàng)建的AudioComponent
將HUD分配給當(dāng)前的GameMode,然后運(yùn)行,這個時候你就會發(fā)現(xiàn)背景音樂就成功響起來了。
在C++中使用:
新建一個HUD類,命名為MyGameHUD
新建一個GameModeBase類,命名為MyGameModeBase
在MyGameModeBase構(gòu)造函數(shù)中添加以下代碼:
HUDClass = MyGameHUD::StaticClass();
頭文件:
#include "Components/AudioComponent.h"
在HUD添加一個成員變量:
class UAudioComponent* BkSoundPlayer;
在HUD構(gòu)造函數(shù)中添加以下代碼:
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); //當(dāng)綁定一個播放結(jié)束后事件函數(shù)
游戲開始后播放音樂,那么在MyGameHUD的BeginPlay函數(shù)中添加以下代碼:
BkSoundPlayer->Play(); //播放音樂
事件回調(diào):
void MyGameHUD::OnHallMenuBkSoundFinished()
{
GetWorld()->GetTimerManager().SetTimer(BackgroundSoundTimerHandle, this,
&MyGameHUD::BackgroundSoundTimerHandleCallback, 5.0f, false); //設(shè)置定時器延時5秒,只運(yùn)行一次
}
void MyGameHUD::BackgroundSoundTimerHandleCallback()
{
BkSoundPlayer->Play(); //定時時間到了過后就播放音樂
}
以上就完成了背景音樂的播放
但是要注意的是,在BkSoundPlayer->OnAudioFinished.AddDynamic這句代碼添加的回調(diào)函數(shù)必須得是UFUNCTION,也就是在MyGameHUD類定義的頭文件中,
BackgroundSoundTimerHandleCallback函數(shù)必須得定義成UFUNCTION,如下所示:
UFUNCTION()
void BackgroundSoundTimerHandleCallback();
AudioComponent還能調(diào)整音量等各種關(guān)于聲音的操作,
比如調(diào)節(jié)音量為百分之50:
Adjust Volume Duration:聲音改變需要的時間(自動淡出淡入)
Adjust Volume Level: 聲音音量的百分比大小
BkSoundPlayer->AdjustVolume(0.0f, 0.5f);