UE4 地面の種類を判別して足音を再生する
UE4の足音の再生に関しては
たくさんの方がブログなどに既に書かれていますが、
私が普段書いている処理を少し書きたいと思います。
詳しい処理の内容が知りたい方はこちら
ではやっていきます。
準備
今回はUE4 4.14.3を使用します。
プロジェクトを作成し、
Third Personテンプレートで起動します。
使用するファイルはこちらです。
同じ種類の地面につき8種類の音声ファイルを用意しました。
わかりやすい地面を作成する
※これはしなくていい作業です。
ブログを見やすくするために作成しました。
BSPを適当なサイズでStatic Meshにし、
適当なCollisionをつけています。
そして、適当に並べてStarter Contentsの中にあった
それっぽいマテリアルを適応します。
左から「土」「フローリング」「水溜まり」です。
Sound Cueファイルを作成する
Sound Cueファイルはこんな感じになっています。
地面の種類に応じて8種類の音からランダムで選択再生します。
Randomノードの先には
Int Parameter 「GroundType」を持った
Switchノードがあります。
このノードで次のPhysical Surfaceと紐づけをします。
Physical Surfaceを設定する
Project設定を開き、左側のPhysicsを選択します。
そのページの下の方にあるPhysical Surfaceの設定を行います。
Surface Typeに判別したい地面の種類を書き込んでいきます。
Sound CueのSwitchノードにつないだ、
音と同じ順番になるように記述してください。
Physical Materialを作成する
コンテンツブラウザを右クリック
Physics→Physical Mterialを選択します。
Physical Materialを選択し、Selectを押します。
Physical Materialを必要分作成し、
それぞれこのような名前をつけました。
Physical Materialを開き、先ほどProject設定で
作成したSurface Typeを適応していきます。
PM_WoodならWood、
PM_WaterならWaterという感じです。
作成したPhysical Materialをそれぞれの地面に設定します。
レベルに配置してあるMeshを選択し、
Phys Material Overrideに適応したいPhysical Materialを設定します。
処理を書く
私自身サウンド部分を担当することは多いですが、
再生部分の実装はあまり行わないので
今回はFunction Libraryを使用して処理を書きます。
コンテンツブラウザを右クリック
Blueprints→Function Libraryを選択します。
作成したFunction Libraryを開き
PlayFootStepという関数を新規追加します。
処理の全体図です。
もう少し短縮できると思うのですが、
今回はこれで行きます。
引数にPawn OwnerというActor型の変数を用意しています。
引数から得たActorのLocationを取得し、足元の判定範囲を
Line Traceに流しています。
デバッグ用にLine Traceを視覚化しています。
そのLine TraceのHit判定を利用し、足元のPhysical Materialを検出します。
Physical Materialが検出できたら、ActorのRoot Conponentに
足音用のSound CueをAttachします。
Selectノードはひし形の部分を右クリックし、
Change Pin Typeを選択します。
ここでIntegerを選択して下さい。
すると上のスクリーンショットと同じ形になります。
AttachしたSound Cueの中にあるGround Typeを変更します。
その後Play Sound For Data TableでSound Cueを再生します。
Play Sound For Data Tableについては
過去記事を参照してください。
これで実装部分の処理は完了です。
アニメーションの通知設定を行う
実装部分の処理は書いたので、
次は呼び出し処理の準備を行います。
Third Person Runというアニメーションを開いてください。
先ほどの関数の呼び出しには
Anim Notifyを使用します。
アニメーション中の足が丁度地面に着くぐらいの
ところにAdd Notify→New Notifyを選択し
FootStepという名前の通知を追加します。
通知が追加されると、こんな感じになると思います。
このアニメーションには2回足が地面に着くので、
もう一方の方にも通知を追加します。
呼び出し処理を書く
Third Person AnimBPを開いてください。
アニメーションブループリントの
イベントグラフにEvent AnimNotify_FootStepを追加します。
Event AnimNotify_FootStepが追加できたら、
作成した関数のPlayFootStepを呼び出します。
関数の引数には、Try Get Pawn Ownerから
取得できる情報を渡しましょう。
これでアニメーション通知を作成したところで
サウンドが再生されます。
確認してみる
Physical Materialを適応した箇所で
指定したサウンドがなっていると思います。