UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 地面の種類を判別して足音を再生する

UE4の足音の再生に関しては

たくさんの方がブログなどに既に書かれていますが、

私が普段書いている処理を少し書きたいと思います。

 

詳しい処理の内容が知りたい方はこちら

pafuhana1213.hatenablog.com

 

ではやっていきます。

 

準備

今回はUE4 4.14.3を使用します。

f:id:MozPaca:20170128012413p:plain

 

プロジェクトを作成し、

Third Personテンプレートで起動します。

 

使用するファイルはこちらです。

f:id:MozPaca:20170130114239p:plain

f:id:MozPaca:20170130114250p:plain

f:id:MozPaca:20170130114300p:plain

同じ種類の地面につき8種類の音声ファイルを用意しました。

 

わかりやすい地面を作成する

※これはしなくていい作業です。

 ブログを見やすくするために作成しました。

 

BSPを適当なサイズでStatic Meshにし、

適当なCollisionをつけています。

f:id:MozPaca:20170130120019p:plain

 

そして、適当に並べてStarter Contentsの中にあった

それっぽいマテリアルを適応します。

f:id:MozPaca:20170130120103p:plain

左から「土」「フローリング」「水溜まり」です。

 

Sound Cueファイルを作成する

Sound Cueファイルはこんな感じになっています。

f:id:MozPaca:20170130114836p:plain

 

地面の種類に応じて8種類の音からランダムで選択再生します。

f:id:MozPaca:20170130114858p:plain

 

Randomノードの先には

Int Parameter 「GroundType」を持った

Switchノードがあります。

このノードで次のPhysical Surfaceと紐づけをします。

f:id:MozPaca:20170130115006p:plain

 

Physical Surfaceを設定する

Project設定を開き、左側のPhysicsを選択します。

そのページの下の方にあるPhysical Surfaceの設定を行います。

Surface Typeに判別したい地面の種類を書き込んでいきます。

f:id:MozPaca:20170130115153p:plain

Sound CueのSwitchノードにつないだ、

音と同じ順番になるように記述してください。 

 

Physical Materialを作成する

コンテンツブラウザを右クリック

Physics→Physical Mterialを選択します。

f:id:MozPaca:20170130120329p:plain

 

Physical Materialを選択し、Selectを押します。

f:id:MozPaca:20170130120443p:plain

 

Physical Materialを必要分作成し、

それぞれこのような名前をつけました。

f:id:MozPaca:20170130120541p:plain

 

Physical Materialを開き、先ほどProject設定で

作成したSurface Typeを適応していきます。

f:id:MozPaca:20170130120530p:plain

PM_WoodならWood、

PM_WaterならWaterという感じです。

 

作成したPhysical Materialをそれぞれの地面に設定します。

レベルに配置してあるMeshを選択し、

Phys Material Overrideに適応したいPhysical Materialを設定します。

f:id:MozPaca:20170130120826p:plain

 

処理を書く

私自身サウンド部分を担当することは多いですが、

再生部分の実装はあまり行わないので

今回はFunction Libraryを使用して処理を書きます。

 

コンテンツブラウザを右クリック

Blueprints→Function Libraryを選択します。

 

作成したFunction Libraryを開き

PlayFootStepという関数を新規追加します。

 

処理の全体図です。

もう少し短縮できると思うのですが、

今回はこれで行きます。

f:id:MozPaca:20170130121846p:plain

 

引数にPawn OwnerというActor型の変数を用意しています。

引数から得たActorのLocationを取得し、足元の判定範囲を

Line Traceに流しています。

f:id:MozPaca:20170130121940p:plain

デバッグ用にLine Traceを視覚化しています。

 

そのLine TraceのHit判定を利用し、足元のPhysical Materialを検出します。

Physical Materialが検出できたら、ActorのRoot Conponentに

足音用のSound CueをAttachします。

f:id:MozPaca:20170130122541p:plain

 

Selectノードはひし形の部分を右クリックし、

Change Pin Typeを選択します。

f:id:MozPaca:20170130123107p:plain

 

ここでIntegerを選択して下さい。

f:id:MozPaca:20170130123159p:plain

 

すると上のスクリーンショットと同じ形になります。

f:id:MozPaca:20170130123227p:plain

 

AttachしたSound Cueの中にあるGround Typeを変更します。

その後Play Sound For Data TableでSound Cueを再生します。f:id:MozPaca:20170130122217p:plain

 

Play Sound For Data Tableについては

過去記事を参照してください。

mozpaca.hatenablog.com

 

これで実装部分の処理は完了です。

 

アニメーションの通知設定を行う

実装部分の処理は書いたので、

次は呼び出し処理の準備を行います。

 

Third Person Runというアニメーションを開いてください。

f:id:MozPaca:20170130123333p:plain

 

先ほどの関数の呼び出しには

Anim Notifyを使用します。

 

アニメーション中の足が丁度地面に着くぐらいの

ところにAdd Notify→New Notifyを選択し

FootStepという名前の通知を追加します。

f:id:MozPaca:20170130123523p:plain

 

通知が追加されると、こんな感じになると思います。

f:id:MozPaca:20170130123806p:plain

 

このアニメーションには2回足が地面に着くので、

もう一方の方にも通知を追加します。

f:id:MozPaca:20170130123912p:plain

 

呼び出し処理を書く

Third Person AnimBPを開いてください。

f:id:MozPaca:20170130124033p:plain

 

アニメーションブループリントの

イベントグラフにEvent AnimNotify_FootStepを追加します。

f:id:MozPaca:20170130124128p:plain

 

Event AnimNotify_FootStepが追加できたら、

作成した関数のPlayFootStepを呼び出します。

関数の引数には、Try Get Pawn Ownerから

取得できる情報を渡しましょう。

f:id:MozPaca:20170130124227p:plain

 

これでアニメーション通知を作成したところで

サウンドが再生されます。

 

確認してみる

Physical Materialを適応した箇所で

指定したサウンドがなっていると思います。

www.youtube.com