0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

弾丸のバウンドに合わせて音を出す【UnrealC++】

Last updated at Posted at 2023-07-16

概要

弾丸(ProjectileMovement)が物に当たった時に呼び出されるデリゲートを使って、弾丸がバウンドする度に音を出す処理を実装します。

・FPSテンプレートを使用します。
・プロジェクト名はBounceTestとします。
・UE5.1.1を使用します。


プロジェクトを作って開く

FPSテンプレートでc++を選択後プロジェクトを作成します。名前はBounceTestとします。
プロジェクトが開いたらC++ ClassesフォルダからBounceTestProjectileをダブルクリックします。
スクリーンショット 2023-07-16 150710.png
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を開きます。
スクリーンショット 2023-07-16 153038.png

BP_FirstPersonProjectile(Self)を選択し、DetailsよりBounce Soundを検索します。スクリーンショット 2023-07-16 153341.png

好きな音を設定します。
スクリーンショット 2023-07-16 153442.png

最後にプレイして確認します。黄色の弾が壁や床に触れると音が鳴ります。
以上です。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?