はじめに
UE5 に取り込んだ音源を C++ で再生する。
特定のキーを押したとき再生できるようにする。
座標をオブジェクトと同じ位置にし、指向性を持たせる。
C++ クラスを作る
Unreal Editor で右クリック > New C++ Class > Actor > Create Class
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Sound/SoundBase.h"
#include "PlaySound.generated.h"
UCLASS()
class GAME_API APlaySound : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
APlaySound();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
private:
UPROPERTY(EditAnywhere, Category = "Sound")
USoundBase* SoundToPlay;
};
#include "PlaySound.h"
#include "Kismet/GameplayStatics.h"
// Sets default values
APlaySound::APlaySound()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void APlaySound::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void APlaySound::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// Play sound if v key is pressed
if (GetWorld()->GetFirstPlayerController()->WasInputKeyJustPressed(EKeys::V))
{
if (SoundToPlay)
{
UGameplayStatics::PlaySoundAtLocation(this, SoundToPlay, GetActorLocation());
}
}
}
再生する音源を入れる
Unreal Editor 上にドラッグアンドドロップするだけで、UE 内で使えるように変換される。なので複雑な手順は不要。
再生するデータをセットする
PlaySound クラスを Level にドラッグアンドドロップし、Outliner 内にある PlaySound の Details を編集する。
コード内 UPROPERTY(EditAnywhere, Category = "Sound")
で設定した変数、この画像の Sound to Play に再生するファイルをセットする。
実行して再生してみる
if (GetWorld()->GetFirstPlayerController()->WasInputKeyJustPressed(EKeys::V))
このコードで V キーを押したとき、音がセットされていれば再生できるようになっている。
なので、実行後に V キーを押すとセットした音が流れる。(音量注意)
BP クラス化して座標を変える
今作ったクラスを右クリック > Create Blueprint class based on PlaySound を選択し、格納するパスを指定して Create Play Sound Class を押す。
Level に Cube を配置し、先ほど作った BP クラスを Cube 配下に設置、すると Cube の位置から音源が流れる。
※ 音源は BP クラス内でセットしておくこと。
指向性と距離減衰がない場合
もし、指向性や距離減衰がない場合は、取り込んだ音源ファイル をダブルクリック後 Attenuation Setting
を変更する。もし設定が何も存在しない場合は、新規アセットを自分で生成し、割り当ててあげるといい感じになる。