概要
弾丸(ProjectileMovement)が物に当たった時に呼び出されるデリゲートを使って、弾丸がバウンドする度に音を出す処理を実装します。
・FPSテンプレートを使用します。
・プロジェクト名はBounceTestとします。
・UE5.1.1を使用します。
プロジェクトを作って開く
FPSテンプレートでc++を選択後プロジェクトを作成します。名前はBounceTestとします。
プロジェクトが開いたらC++ ClassesフォルダからBounceTestProjectileをダブルクリックします。
VisualStudioが立ち上がります。
.h(ヘッダー)に以下を追記
SampleCharacter.cpp
protected:
// OnBounceを呼び出す為のBeginPlay(コンストラクタで呼び出すとコンパイルエラーになる)
virtual void BeginPlay() override;
UFUNCTION()
void OnBounce(const FHitResult& ImpactResult, const FVector& ImpactVelocity);
private:
UPROPERTY(EditAnywhere)
class USoundCue* BounceSound;
.cpp(ソース)に以下を追記
SampleCharacter.cpp
#include "Kismet/GameplayStatics.h"
#include "Sound/SoundCue.h"
void ABounceTestProjectile::BeginPlay()
{
AActor::BeginPlay();
ProjectileMovement->OnProjectileBounce.AddDynamic(this, &ABounceTestProjectile::OnBounce);
}
void ABounceTestProjectile::OnBounce(const FHitResult& ImpactResult, const FVector& ImpactVelocity)
{
if (BounceSound)
{
UGameplayStatics::PlaySoundAtLocation(
this,
BounceSound,
GetActorLocation()
);
}
}
ここまで書いたらコンパイルします。(UE5はCtrl+F5, UE4はCtrl+Alt+F11)
エディターで音の設定
BP_FirstPersonProjectileを開きます。
BP_FirstPersonProjectile(Self)を選択し、DetailsよりBounce Soundを検索します。
最後にプレイして確認します。黄色の弾が壁や床に触れると音が鳴ります。
以上です。