UE4のAngelScript上でwwiseを使ってBGM再生
class AMyLevel : ALevelScriptActor { UPROPERTY() UAkAudioBank MainBank = Asset("/Game/WwiseAudio/Main_Bank.Main_Bank"); UPROPERTY() UAkAudioEvent PlayTitleAsset = Asset("/Game/WwiseAudio/Events/Default_Work_Unit/PlayTitle.PlayTitle"); UFUNCTION(BlueprintCallable) void InitBGM() { AkGameplay::LoadInitBank(); AkGameplay::LoadBank(MainBank, "", FLatentActionInfo()); } UFUNCTION(BlueprintCallable) void PlayTitle() { AkGameplay::PostEvent(PlayTitleAsset, Gameplay::GetPlayerPawn(0), 0, FOnAkPostEventCallback(), TArray<FAkExternalSourceInfo>()); } };
BP側で継承してアウトゲーム部分でBGMを簡易再生するようなシチュエーションを想定。
InitBGMを呼んでPlayTitleを呼べばPostEventされる。
BP側ではデフォルト値で埋めてくれる部分もAS側では手動で埋める必要があることに注意。
Asset()はコンストラクタかdefaultに対してしか使えないっぽい。
関数内で参照を取りたい場合は
Cast<UAkAudioEvent>(LoadAsset(nullptr, "/Game/WwiseAudio/Events/Default_Work_Unit/PlayTitle.PlayTitle"));
のようにする。
追記
staticが無い代わりにグローバル関数をBlueprintCallableな関数として登録が可能だったので
これでいいかも。
UFUNCTION(BlueprintCallable) void InitBGM() { UAkAudioBank MainBank = Cast<UAkAudioBank>(LoadObject(nullptr, "/Game/WwiseAudio/Main_Bank.Main_Bank")); AkGameplay::LoadInitBank(); AkGameplay::LoadBank(MainBank, "", FLatentActionInfo()); } UFUNCTION(BlueprintCallable) void PlayTitleBGM() { UAkAudioEvent PlayTitleAsset = Cast<UAkAudioEvent>(LoadObject(nullptr, "/Game/WwiseAudio/Events/Default_Work_Unit/PlayTitle.PlayTitle")); AkGameplay::PostEvent(PlayTitleAsset, Gameplay::GetPlayerPawn(0), 0, FOnAkPostEventCallback(), TArray<FAkExternalSourceInfo>()); }