Unreal Engine:水の中で走るとバシャバシャ音がして水しぶきがあがるようにする

左側の足がRightFootということも念のために確認しておきます。

走行アニメのLeftFootのFootStepsNotifyを選択します。

詳細タブのBoneNameにLeftFootと記述します。

RightFootのFootStepsNotifyのBoneNameにRightFootと記述して保存を押します。

歩行アニメにも走行アニメと同様の処理を施します。

Mesh Compピンを引っ張て検索窓にgetsocketlと入力して出てきたノードを選択します。

Ctrlキーを押しながら変数BoneNameをエディタ内に引っ張り出します。

Bone NameとIn Socket Nameをつなぎます。

Received Notifyノードの実行ピンを引き出して検索窓にplaysoundaと入力して出てきたノードを選択します。

 

Get SocketのReturn ValueとPlay SoundのLocationをつなぎます。

PlaySoundのSoundを開いて検索窓にwaterと入力してFootstep_waterを選択します。

Play Soundの実行ピンとReturn Nodeの実行ピンをつないでコンパイルと保存を押します。

スポンサーリンク

C++でSurfaceType関数を作成する

MyCharacter.hに関数を宣言します。

UFUNCTION(BlueprintCallable)
EPhysicalSurface GetSurfaceType();

MyCharacter.cppにヘッダーファイルを追加します。

#include "PhysicalMaterials/PhysicalMaterial.h"

MyCharacter.cppに関数の定義を記述します。

EPhysicalSurface AMyCharacter::GetSurfaceType()
{
	FHitResult HitResult;
	const FVector Start{ GetActorLocation() };
	const FVector End{ Start + FVector(0.f, 0.f, -400.f) };
	FCollisionQueryParams QueryParams;
	QueryParams.bReturnPhysicalMaterial = true;

	GetWorld()->LineTraceSingleByChannel(
		HitResult,
		Start,
		End,
		ECollisionChannel::ECC_Visibility,
		QueryParams);
	return UPhysicalMaterial::DetermineSurfaceType(HitResult.PhysMaterial.Get());
}

プロジェクト名.Build.cs(ここではMyProject.Build.cs)にPhysicsCoreを追加します。

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "PhysicsCore" });
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました