左側の足が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" });
スポンサーリンク
スポンサーリンク
コメント